Yo uso set -e para detener el script bash en el primer error.
Todo funciona bien a menos que use el comando con && :
$ cat script
set -e
cd not_existing_dir && echo 123
echo "I'm running! =P"
$
$ ./script
./script: line 2: cd: not_existing_dir: No such file or directory
I'm running! =P
$
comparado con:
$ cat script
set -e
cd not_existing_dir
echo "I'm running! =P"
$
$ ./script
./script: line 2: cd: not_existing_dir: No such file or directory
$
El primer ejemplo todavía hace eco I'm running! , pero el segundo no. ¿Por qué se comportan de manera diferente?
UPD. Pregunta similar:https://stackoverflow.com/questions/6930295/set-e-and-short-tests
Respuesta aceptada:
Este es un comportamiento documentado.
La página man de bash(1) dice, para set -e ,
El shell no sale si el comando que falla
es parte de la lista de comandos
inmediatamente después de un while o until palabra clave,
parte de la prueba que sigue al if o elif palabras reservadas, parte de cualquier comando ejecutado en un && o || lista excepto el comando que sigue al && final o || ,
cualquier comando en una canalización excepto el último,
o si el valor de retorno del comando se invierte con ! .
[Énfasis añadido.]
Y el lenguaje de comandos de shell de POSIX La especificación confirma que este es el comportamiento correcto:
El -e la configuración se ignorará
al ejecutar la lista compuesta
después de while , until ,if , o elif palabra reservada,
una canalización que comienza con ! palabra reservada,
o cualquier comando de una lista AND-OR que no sea el último.
y Sección 2.9.3 Listas de ese documento define
Una lista AND-OR es una secuencia de una o más canalizaciones
separadas por los operadores "&& ” y “|| “.