这是一个例子:
$ (newline=$'\n'; bash -c "trap 'trap ERR; echo handler' ERR; set -e;${newline}/bin/false")
如果执行以下任一操作,该处理程序将执行:
- 删除换行符
- 代替退出
- 最后添加另一个命令
我怀疑bash有一个优化,如果只有一个命令,则仅调用exec,而换行符后接一个命令即可触发它。
我有间接证据:我遇到了麻烦;较早的cmds将先执行vfork然后执行,但是最后一个仅调用execv。
我遇到了使用.ONESHELL和陷阱打印退出代码和日志文件名的GNU make的问题,但是如果最后一件失败了,陷阱将不会执行。
提前致谢。
您的示例在Debian GNU / Linux 9的GNU Bash 4.4.12(1)
—
。– Kamil Maciorowski
感谢您提醒我有关此问题的信息;我已经添加了答案。
—
布莱恩·范登堡