我有一个包含 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