Las otras respuestas han cubierto bien la pregunta directa, pero también puede estar interesado en usar set -e
. Con eso, cualquier comando que falle (fuera de contextos específicos como if
tests) hará que el script se cancele. Para ciertos scripts, es muy útil.
Prueba:
my_command || { echo 'my_command failed' ; exit 1; }
Cuatro cambios:
- Cambiar
&&
a||
- Usar
{ }
en lugar de( )
- Presente
;
después deexit
y - espacios después de
{
y antes de}
Dado que desea imprimir el mensaje y salir solo cuando el comando falla (sale con un valor distinto de cero), necesita un ||
no es un &&
.
cmd1 && cmd2
ejecutará cmd2
cuando cmd1
tiene éxito (valor de salida 0
). donde como
cmd1 || cmd2
ejecutará cmd2
cuando cmd1
falla (valor de salida distinto de cero).
Usando ( )
hace que el comando dentro de ellos se ejecute en un sub-shell y llamando a un exit
a partir de ahí, hace que salga de la subcapa y no de su caparazón original, por lo que la ejecución continúa en su caparazón original.
Para superar este uso { }
bash requiere los dos últimos cambios.