перехват кода выхода оболочки
-
19-09-2019 - |
Вопрос
Я работаю над сценарием оболочки и хочу обрабатывать различные коды выхода, с которыми я могу столкнуться.Чтобы попробовать что-то, я использую этот скрипт:
#!/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)?
Решение
trap
отправляет сигналы, которые получает процесс (например, от kill
), а не по кодам выхода, с ловушкой...0 зарезервирован для завершения процесса. trap /blah/blah 0
отправлю либо exit 0
или exit 1
Другие советы
Это всего лишь код выхода, он не означает HUP.Так что ваши trap ... 1
ищет HUP, но выход - это просто выход.
В дополнение к системным сигналам, которые вы можете просмотреть, выполнив trap -l
, вы можете использовать некоторые специальные спецификации Bash:ОШИБКА, ВЫХОД, ВОЗВРАТ и ОТЛАДКА.Во всех случаях для удобства чтения следует использовать имя сигнала, а не номер.
Вы также можете использовать || оператор, с || B, B выполняется, когда не удалось
#!/bin/sh
failed
{
echo "Failed $*"
exit 1
}
dosomething arg1 || failed "some comments"