Каково влияние этого утверждения в сценарии оболочки?
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.