Bash陷阱似乎会自动避免递归。在这个例子中,我期望无限递归,因为我无法找到明确禁止它的文档;但是,输出停止了。
我可能遗漏了一些明显的东西,但我找不到保证手册页中非递归的文档。任何人都可以找到讨论此事的官方文件吗?
#!/bin/bash
set -Eu
err1()
{
echo in err1
false
}
err2()
{
echo in err2
false
}
trap 'err1 ; err2' ERR
false
Ouptput是:
in err1
in err2
答案 0 :(得分:1)
除非set -o errtrace
,否则子shell(包括函数调用)不会继承ERR陷阱。这将自动包括陷阱处理程序。
即使您设置了shell选项,也不会在陷阱处理程序内调用ERR陷阱。 bash手册似乎没有提到这一点。