код выхода из ловушки оболочки - PullRequest
3 голосов
/ 08 января 2010

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

#!/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)?

Ответы [ 3 ]

5 голосов
/ 08 января 2010

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

2 голосов
/ 08 января 2010

Это просто код выхода, это не значит HUP. Итак, ваш trap ... 1 ищет HUP, но выход - это просто выход.

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

0 голосов
/ 08 января 2010

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

#!/bin/sh

failed
{
    echo "Failed $*"
    exit 1
}

dosomething arg1 || failed "some comments"
...