Вопрос

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

#!/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"
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top