Почему команда trap не видит код выхода? - PullRequest
0 голосов
/ 14 сентября 2018

У меня проблемы с тем, что команда 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 Ответ

0 голосов
/ 17 сентября 2018

Здесь две проблемы:

  • Поскольку строка trap 'finish' EXIT находится внизу скрипта, любая команда exit, которая вызывается до того, как выполнение достигнет этой точки, не будет учитыватьtrap.

    Чтобы решить эту проблему, переместите объявление функции finish и активирующую ее команду trap над первой точкой в ​​сценарии, где может возникнуть exit

  • Поскольку sleep 5 находится непосредственно над term=$?, он переопределяет значение $?, которое могло бы быть установлено в противном случае.Обязательно запишите $? перед выполнением любых команд, которые могут его изменить.

...