¿Cómo salir si falló un comando? [duplicar]
Soy un novato en scripts de shell. Quiero imprimir un mensaje y salir de mi script si falla un comando. He intentado:
my_command && (echo 'my_command failed; exit)
Pero no funciona. Sigue ejecutando las instrucciones que siguen esta línea en el script. Estoy usando Ubuntu y bash.
Intentar:
my_command || { echo 'my_command failed' ; exit 1; }
Cuatro cambios:
- Cambiar
&&
a||
- Usar
{ }
en lugar de( )
- Introducir
;
despuésexit
y - espacios después
{
y antes}
Como desea imprimir el mensaje y salir solo cuando el comando falla (sale con un valor distinto de cero), necesita un ||
not an &&
.
cmd1 && cmd2
se ejecutará cmd2
cuando cmd1
tenga éxito (valor de salida 0
). Mientras
cmd1 || cmd2
se ejecutará cmd2
cuando cmd1
falle (valor de salida distinto de cero).
El uso ( )
hace que el comando dentro de ellos se ejecute en un subshell y llamar a exit
desde allí hace que salga del subshell y no del shell original, por lo que la ejecución continúa en su shell original.
Para superar este uso{ }
bash requiere los dos últimos cambios.
Las otras respuestas han cubierto bien la pregunta directa, pero es posible que también le interese utilizar set -e
. Con eso, cualquier comando que falle (fuera de contextos específicos como if
pruebas) hará que el script se cancele. Para ciertos scripts, es muy útil.
Si desea ese comportamiento para todos los comandos en su secuencia de comandos, simplemente agregue
set -e
set -o pipefail
al comienzo del guión. Este par de opciones le dicen al intérprete de bash que salga cada vez que un comando regresa con un código de salida distinto de cero. (Para obtener más detalles sobre por qué pipefail
es necesario, consulte http://petereisentraut.blogspot.com/2010/11/pipefail.html ).
Sin embargo, esto no le permite imprimir un mensaje de salida.