Linux set-o errtrace在shell脚本中做什么?
此语句在shell脚本中的效果如何Linux set-o errtrace在shell脚本中做什么?,linux,bash,shell,Linux,Bash,Shell,此语句在shell脚本中的效果如何 set -o errtrace 从手册中: 错误跟踪 与-E相同 -E如果设置,则外壳函数将继承ERR上的任何陷阱, 命令替换,以及在子系统中执行的命令 shell环境。错误陷阱通常不在其内部 在这种情况下,这是不可能的 启用errtrace时,当函数或子shell中发生错误(返回非零代码的命令)时,也会触发错误陷阱。另一种说法是,除非启用了errtrace,否则函数或子shell的上下文不会继承ERR陷阱 #!/bin/bash set -o errtr
set -o errtrace
从手册中:
错误跟踪
与-E相同
-E如果设置,则外壳函数将继承ERR上的任何陷阱,
命令替换,以及在子系统中执行的命令
shell环境。错误陷阱通常不在其内部
在这种情况下,这是不可能的
启用errtrace
时,当函数或子shell中发生错误(返回非零代码的命令)时,也会触发错误陷阱。另一种说法是,除非启用了errtrace
,否则函数或子shell的上下文不会继承ERR陷阱
#!/bin/bash
set -o errtrace
function x {
echo "X begins."
false
echo "X ends."
}
function y {
echo "Y begins."
false
echo "Y ends."
}
trap 'echo "ERR trap called in ${FUNCNAME-main context}."' ERR
x
y
false
true
输出:
X begins.
ERR trap called in x.
X ends.
Y begins.
ERR trap called in y.
Y ends.
ERR trap called in main context.
未启用errtrace
时:
X begins.
X ends.
Y begins.
Y ends.
ERR trap called in main context.
其目的显然是让用户转向,但似乎失败了。