Почему команда 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=$?это переопределяет значение $? который мог бы быть установлен в противном случае. Не забудьте захватить $? перед запуском любых команд, которые могут изменить его.

Другие вопросы по тегам