kon*_*box 19

从手册:

#!/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
Run Code Online (Sandbox Code Playgroud)

errtrace被使能,当错误(命令返回一个非零码)函数或子外壳内发生也被触发的ERR陷阱.换句话说,我们可以告诉你,除非errtrace启用了函数或子shell的上下文,否则它不会继承ERR陷阱.

X begins.
ERR trap called in x.
X ends.
Y begins.
ERR trap called in y.
Y ends.
ERR trap called in main context.
Run Code Online (Sandbox Code Playgroud)

输出:

X begins.
X ends.
Y begins.
Y ends.
ERR trap called in main context.
Run Code Online (Sandbox Code Playgroud)

何时errtrace未启用:

#!/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
Run Code Online (Sandbox Code Playgroud)