La trampa ERR
obedece las mismas reglas que set -e
, es decir, no tiene efecto sobre los comandos que se usan como condiciones. Entonces,
trap "echo error" ERR
false # this should trigger the trap
if ! false; then # this shouldn't
echo handle stuff
fi
Recuerde que el comando en la condición if
puede ser cualquier comando , no tiene que ser [.. ]
. Por lo tanto, si solo desea una evaluación de verdadero/falso del estado de salida de un comando, utilícelo directamente en la condición if
.
Si necesita guardar el código de salida y evitar la trampa ERR
, deberá hacer algo como
somecmd && :; ret=$?
Aquí, &&
aplastará la trampa ERR
, pero dado que solo se ejecuta si el código de salida es cero, sabremos que el código de salida es el mismo después de :
.
Es posible que desee verificar BashFAQ 105 :¿Por qué no establece -e (o establece -o errexit, o trap ERR )hace lo que esperaba?