Manejo de errores en Bash
Este artículo enseña el manejo de errores en bash. Recuerde, conocer los códigos de salida, opciones como errexit
y trap
nos permite construir scripts robustos y manejar problemas con bash de manera más efectiva.
Códigos de salida en Bash
El manejo de errores basado en códigos de salida es la técnica estándar para detectar fallas en los comandos. Esto es particularmente cierto con respecto a los comandos externos.
El comando curl
en bash es un excelente ejemplo de cómo manejar problemas basados en códigos de error conocidos. A diferencia de las rutinas definidas por el usuario, los códigos de error de comandos externos están completamente documentados.
${?}
almacena un estado de salida del último comando ejecutado antes de una línea dada. Un código de 0
indica que el comando se ejecutó con éxito. De lo contrario, algo salió mal.
case {?} in
0) {
true # ok
} ;;
*) {
false # something went wrong
}
El manejo de errores de Bash se puede realizar con códigos de salida simples. Puedes intentarlo hasta que encuentres una solución más perezosa. Como mínimo, cualquier individuo haría esto después de implementar algunos condicionales para manejar los problemas de acuerdo con los códigos de error.
Salir en caso de error
Exit on error es, sin duda, la capacidad de detección y manejo de errores más útil con la que los programadores de bash no comienzan.
trampa
, SALIR
y ERROR
trap
nos permite especificar comandos para ejecutar si el shell recibe una señal. SIGNAL SPECs
son los nombres dados a las señales. Algunas señales frecuentes de EXIT, ERROR, DEBUG y RETURN
.
Podemos listar más señales usando el comando trap -l
. También podemos determinar qué comandos están vinculados con una determinada señal utilizando trap -p SIGSPEC
.
Por ejemplo, podemos querer determinar qué comandos corresponden a la señal ERR
. En esa situación, podríamos escribir la siguiente línea de comando:
trap -p ERR
Si la salida está vacía, trap
aún no ha vinculado ningún comando con la señal.
_() { echo oops ; }
trap _ ERR EXIT
Ahora, los comandos de señal de impresión no producen un resultado vacío.
APORTE:
trap -p EXIT ERR
Producción :
trap -- '_' EXIT
trap -- '_' ERR