Bash ERR信号没有被困在程序中?

时间:2015-06-17 11:17:02

标签: bash signals

请考虑以下代码:

#!/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上有相同的行为。

1 个答案:

答案 0 :(得分:3)

在FUNCTIONS上引用man bash

  

ERR陷阱是          除非已启用-o errtrace shell选项,否则不会继承。

所以,只需添加

set -o errtrace

到脚本,它开始工作。