根据这个参考手册:
-E(还有 -o errtrace)
如果设置,则 ERR 上的任何陷阱都由 shell 函数、命令替换和在子 shell 环境中执行的命令继承。在这种情况下,ERR 陷阱通常不会被继承。
但是,我必须错误地解释它,因为以下不起作用:
#!/usr/bin/env bash
# -*- bash -*-
set -e -o pipefail -o errtrace -o functrace
function boom {
echo "err status: $?"
exit $?
}
trap boom ERR
echo $( made up name )
echo " ! should not be reached ! "
Run Code Online (Sandbox Code Playgroud)
我已经知道简单的赋值,my_var=$(made_up_name), 将退出脚本set -e(即 errexit)。
是 -E/-o errtrace应该的工作方式类似于上面的代码?或者,最有可能的是,我误读了它?