Na página de informações de bash
:
All other aspects of the shell execution environment are identical between a function and its caller with these exceptions: the
DEBUG
andRETURN
traps are not inherited unless the function has been given thetrace
attribute using thedeclare
builtin or the-o functrace
option has been enabled with theset
builtin, (in which case all functions inherit theDEBUG
andRETURN
traps), and theERR
trap is not inherited unless the-o errtrace
shell option has been enabled.
Então, você precisa set -o errtrace
na parte superior do script para que a ERR
trap seja propagada em suas funções.
Além disso, você precisa ter cuidado com essa recursiva ERR
trap em err_out
. Você realmente deseja definir uma nova armadilha no manipulador de erros ou deseja exibir essa mensagem? Se este último, apenas echo
it; o trap
só seria invocado se um erro ocorresse no seu manipulador de erros.