请考虑以下代码:
#!/bin/bash
trap 'echo "ERROR" && exit 2' ERR
proc(){
false
return 0
}
echo START
proc
echo END
以上显示输出
START
END
但我希望 false 命令触发ERR信号的陷阱过程。
如果我输入 false 而不是调用 proc ,则触发并输出信号
START
ERROR
按预期显示。如果我在 proc 过程的开头再次使用陷阱命令,则会再次正确捕获它。
除非在程序中重复陷阱命令,否则陷阱只能在程序之外工作?我找不到任何相关的文件。
我在bash版本3.1.0,3.2.25,4.1.17上有相同的行为。
答案 0 :(得分:3)
在FUNCTIONS上引用man bash
:
ERR陷阱是
除非已启用-o errtrace
shell选项,否则不会继承。
所以,只需添加
set -o errtrace
到脚本,它开始工作。