Linux set-o errtrace在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

此语句在shell脚本中的效果如何

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.

其目的显然是让用户转向,但似乎失败了。