Ловушка не работает

Ловушка не работает

У меня есть скрипт оболочки, содержащий ловушку, но ловушка, похоже, не работает так, как ожидалось. Ниже приведен код и версия bash.

GNU bash, версия 4.2.46(2)-релиз (x86_64-redhat-linux-gnu)

set -e
function exit_message(){
  echo -e "\e[31m\nError occurred "
}
function login(){
  false
}
trap exit_message ERR
login

Вышеуказанная ловушка сработает, если я это сделаю

function login(){
  trap exit_message ERR
  false
}

решение1

Отруководство по bash:

Все [...] аспекты среды выполнения оболочки идентичны для функции и ее вызывающей стороны, за исключением следующих случаев: ловушки DEBUG и RETURN не наследуются, если только функции не был присвоен атрибут traceс помощью declareвстроенной функции или если -o functraceсоответствующая опция не была включена с помощью setвстроенной функции (в этом случае все функции наследуют ловушки DEBUG и RETURN), а ловушка ERR не наследуется, если только не -o errtraceбыла включена опция оболочки.

Связанный контент