Cómo ejecutar un comando o función en caso de error en Bash Script

1 ott 2022 2 min di lettura
Cómo ejecutar un comando o función en caso de error en Bash Script
Indice dei contenuti

Introducción

Podemos usar el comando trap para capturar las señales de error del sistema mientras se ejecuta el script. Luego puede ejecutar un comando de shell o llamar a una función. De esta forma, puede ejecutar su propio código de secuencia de comandos personalizado en un error que se produjo en una secuencia de comandos bash.

Esto puede ser útil para revertir cambios parciales, cerrar conexiones de bases de datos o enviar correos electrónicos a las personas afectadas, etc. Puede usar el comando trap con la señal ERR como:

trap 'on_error_function' ERR

Cuando se produce un error en un script de shell, ejecutará una función llamada ' on_error_function ' del script de shell. En lugar de llamar a una función, también puede simplemente ejecutar un comando.

Ejemplo: Cómo ejecutar una función en Error en Bash

Entendamos con un ejemplo. Cree un script de shell de ejemplo y cree una función con cualquier nombre. Luego agregue el comando trap con la función para la señal ERR. Luego, agregue un comando simple que arroje un error:

#!/usr/bin/env bash

 on_error(){
 echo "Some error occurred"
 }

 trap 'on_error' ERR

 ls ~/dir_not_exists

Ejecute el script anterior y debería ver los resultados a continuación:

ls: cannot access '/home/noviello/dir_not_exists': No such file or directory
 Some error occurred

Puede ver que el error está atrapado y el script bash ejecuta la función on_error().

Ejemplo: Cómo ejecutar un comando en Error en Bash

Veamos otro ejemplo. Aquí ejecutaremos un comando cuando ocurra un error en el script de shell:

#!/usr/bin/env bash

 trap 'echo Ohhh no!' ERR

 ls ~/dir_not_exists

En el script anterior, no definimos ninguna función separada. Simplemente ejecute un comando de eco en caso de error. Ejecute el script anterior y vea los resultados:

ls: cannot access '/home/noviello/dir_not_exists': No such file or directory
 Ohhh no!

Ejemplo: Cómo obtener el número de línea del error que ocurrió

También puede encontrar el número de línea, donde ocurrió el error en el script bash junto con el nombre del script. Para hacer esto, use el "llamador" incorporado en bash:

#!/usr/bin/env bash

 on_error(){
 echo "Error found in: $(caller)" >&2
 }

 trap 'on_error' ERR

 ls ~/dir_not_exists

Ejecute el script anterior y vea los resultados. Verá el nombre del script y el número de línea, donde ocurrió el error.

ls: cannot access '/home/noviello/dir_not_exists': No such file or directory
 Error found in: 9./script.sh

Conclusión

Gracias por leer este artículo. Con suerte, este tutorial lo ayudará a escribir mejor los scripts de shell al detectar el error y tomar alguna acción.

Además, recuerda que la trampa ERR solo detecta errores en tiempo de ejecución. Como si cualquier comando devolviera el código de estado distinto de cero. No detecta errores de sintaxis, porque en caso de error de sintaxis, el script falla sin ejecutar ningún comando.

Buy me a coffeeBuy me a coffee

Supportaci se ti piacciono i nostri contenuti. Grazie.

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.