Почему команда trap не видит код выхода?
У меня возникли проблемы, когда EXIT Trap
Команда не видит мой exit
код. Я пытался просто установить $var
от 0
в 1
и сейчас я пытаюсь переопределить exit
с 1
и основываться на том, имеющем trap
Команда запуска определенного кода.
#!/bin/bash
if [[ 0 -ge 1 ]]; then
echo "run code"
else
echo "oops.. dont like what I see"
exit 1
fi
finish() {
sleep 5
term=$?
if [[ $term -eq 0 ]]; then
echo pass
else
echo fail
fi
}
trap 'finish' EXIT
Когда я устраняю неисправность кода. term
присваивается 0
когда exit
срабатывает.
1 ответ
Два вопроса здесь:
Поскольку
trap 'finish' EXIT
строка находится внизу скрипта, любаяexit
команда, которая вызывается до того, как выполнение достигнет этой точки, не будет учитывать ловушкуЧтобы решить эту проблему, переместите
finish
объявление функции иtrap
команда, активирующая его, над первой точкой в скрипте, гдеexit
может произойтиПоскольку
sleep 5
находится сразу надterm=$?
это переопределяет значение$?
который мог бы быть установлен в противном случае. Не забудьте захватить$?
перед запуском любых команд, которые могут изменить его.