Estoy creando un script de Shell que tiene una if
función como esta:
if jarsigner -verbose -keystore $keyst -keystore $pass $jar_file $kalias
then
echo $jar_file signed sucessfully
else
echo ERROR: Failed to sign $jar_file. Please recheck the variables
fi
...
Quiero que la ejecución del script finalice después de mostrar el mensaje de error. ¿Como puedo hacer esto?
Si coloca
set -e
una secuencia de comandos, la secuencia de comandos finalizará tan pronto como falle cualquier comando dentro de ella (es decir, tan pronto como cualquier comando devuelva un estado distinto de cero). Esto no le permite escribir su propio mensaje, pero a menudo los mensajes del comando que falla son suficientes.La ventaja de este enfoque es que es automático: no corre el riesgo de olvidarse de lidiar con un caso de error.
Los comandos cuyo estado es probado por un condicional (como
if
,&&
o||
) no terminan el script (de lo contrario, el condicional no tendría sentido). Un modismo para el comando ocasional cuyo fracaso no importa escommand-that-may-fail || true
. También puedeset -e
desactivar una parte del script conset +e
.fuente
-x
bandera con la-e
bandera es suficiente para saber dónde está su programa al salir. Eso implica que el usuario del script también es el desarrollador.Si desea poder manejar un error en lugar de salir a ciegas, en lugar de usar
set -e
, use atrap
en laERR
pseudo señal.Se pueden configurar otras trampas para manejar otras señales, incluidas las señales habituales de Unix más las otras pseudo señales
RETURN
y BashDEBUG
.fuente
Aquí está la forma de hacerlo:
fuente
exit 1
es todo lo que necesitas. El1
es un código de retorno, por lo que puede cambiarlo si quiere, por ejemplo,1
significar una ejecución exitosa y-1
significar una falla o algo así.fuente
test
o&&
o||
.