陷阱不工作

陷阱不工作

我有一个包含 trap 的 shell 脚本,但 trap 似乎没有按预期工作,下面是代码和 bash 版本

GNU bash,版本 4.2.46(2)-release (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 手册:

shell 执行环境的所有方面在函数及其调用者之间都是相同的,但有以下例外:DEBUG 和 RETURN 陷阱不会被继承,除非已trace使用内置函数为该函数指定了属性declare,或者-o functrace已使用以下命令启用了该选项内置函数(在这种情况下,所有函数都会继承 DEBUG 和 RETURN 陷阱),并且除非启用了 shell 选项,set否则不会继承 ERR 陷阱。-o errtrace

相关内容