2010-01-08 2 views
3

Я работаю над сценарием оболочки и хочу обрабатывать различные коды выхода, с которыми я мог столкнуться. Для того, чтобы попробовать вещи, я использую этот скрипт:tracing shell exit code

#!/bin/sh 
echo "Starting" 
trap "echo \"first one\"; echo \"second one\"; " 1 
exit 1; 

Я предполагаю, что я что-то не хватает, но, кажется, я не могу ловушкой свой собственный «выход 1». Если я пытаюсь поймать 0 все работает:

#!/bin/sh 
echo "Starting" 
trap "echo \"first one\"; echo \"second one\"; " 0 
exit 

Что я должен знать о улавливать HUP (1) код выхода?

ответ

5

trap отправляет по сигналам, которые получает процесс (например, от kill), а не по кодам выхода, с ловушкой ... 0 зарезервировано для завершения процесса. trap /blah/blah 0 отправит на exit 0 или exit 1

0

Вы также можете использовать || оператор с || b, b выполняется при неудачной ошибке

#!/bin/sh 

failed 
{ 
    echo "Failed $*" 
    exit 1 
} 

dosomething arg1 || failed "some comments" 
2

Это всего лишь код выхода, это не означает HUP. Таким образом, ваш trap ... 1 ищет HUP, но выход - это только выход.

В дополнение к системным сигналам, которые вы можете перечислить, выполнив trap -l, вы можете использовать специальные спецэффекты Bash: ERR, EXIT, RETURN и DEBUG. Во всех случаях вы должны использовать имя сигнала, а не номер для удобочитаемости.