Что делает set -o errtrace в сценарии оболочки?

Каково влияние этого утверждения в сценарии оболочки?

set -o errtrace

Ответ 1

Из руководства:

errtrace            То же, что -E.

-E Если установлено, любая ловушка ERR наследуется функциями оболочки,            подстановки команд и команды, выполняемые в            оболочка среды. Ловушка ERR обычно не наследуется            в таких случаях.

Когда errtrace включен, ловушка ERR также срабатывает, когда ошибка (команда, возвращающая ненулевой код) возникает внутри функции или подоболочки. Другой способ выразить это в том, что контекст функции или подоболочки не наследует ловушку ERR, если 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

Выход:

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.