Linux shell try atrapar finalmente
try-catch finally (3)
Especie de:
{ # your ''try'' block
executeCommandWhichCanFail &&
mv output
} || { # your ''catch'' block
mv log
}
rm tmp # finally: this will always happen
¿Hay algún comando linux bash como el java try catch finalmente? ¿O el shell de linux siempre continúa?
try {
`executeCommandWhichCanFail`
mv output
} catch {
mv log
} finally {
rm tmp
}
Según su ejemplo, parece que está intentando hacer algo como eliminar siempre un archivo temporal, independientemente de cómo salga un script. En Bash para hacer esto, pruebe el comando integrado trap para atrapar la señal EXIT
.
#!/bin/bash
trap ''rm tmp'' EXIT
if executeCommandWhichCanFail; then
mv output
else
mv log
exit 1 #Exit with failure
fi
exit 0 #Exit with success
La instrucción rm tmp
en la trap
siempre se ejecuta cuando la secuencia de comandos sale, por lo que el archivo "tmp" siempre intentará eliminarse.
Las trampas instaladas también pueden reiniciarse; una llamada a trap con solo un nombre de señal restablecerá el manejador de señal.
trap EXIT
Para obtener más información, consulte la página del manual de bash: man bash
mv
toma dos parámetros, por lo que puede ser que realmente quieras cazar los contenidos del archivo de salida:
echo `{ execCommand && cat output ; } || cat log`
rm -f tmp