2010-12-16 4 views
1

Есть ли способ для меня реализовать пользовательские поддельные сигналы в ksh? В настоящее время я захватываю сигнал ERR и выхожу. Однако из-за изменения есть вызовы, которые не могут вернуть успех, однако это допустимое условие. В этом случае я хочу убедиться, что этот вызов генерирует другой сигнал или обрабатывает ERR по-разному. Есть ли способ сделать это?пользовательский сигнал ловушки в ksh

ответ

2

Вы можете использовать kill для отправки любого сигнала, который вы хотите в текущую оболочку. Вы можете использовать exit в подоболочке или return в функции для установки любого кода ошибки, который вы хотите.

Попробуйте этот скрипт:

#!/bin/ksh 
trap 'echo USR1 signal processed' USR1 
trap 'echo ERR signal processed' ERR 
[[ $1 == a ]] && kill -s USR1 $$ || (exit 1) 
echo "done" 

Пример:

$ ./testsignal 
ERR signal processed 
done 
$ ./testsignal a 
USR1 signal processed 
done 
+0

Хмм, HI Dennis, интересно, что это не работает. Я вижу только эхо, сделанное выше, и не вижу, чтобы USR1 был пойман. В приведенном выше случае даже ERR не попадает. Однако, когда я добавил следующий chmod 777/где у меня нет прав доступа, он печатает «обработанный ERR-сигнал» – Kiran 2010-12-17 13:28:10

0

Возможно, вы могли бы просто обернуть заявления, коды выхода которых вы хотите рассматривать специально в конструкции, которая просто сделает то, что вы хотите (используя конструкции «или» или «если нет» и анализируя коды выхода).

Это, кажется, намного более чистый стиль программирования, не так ли?

+0

:) вот что я делаю прямо сейчас! хотел очистить дальше и на основе того, что у меня есть, захват сигналов в несколько функций, казалось, был самым чистым способом. – Kiran 2010-12-16 22:47:56

Смежные вопросы