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