En los scripts bash , se deben utilizar diferentes métodos para detectar y manejar los posibles errores que pudiesen ocurrir durante la ejecución de nuestros scripts bash.
1.- En Bash, cada ejecución de un comando devuelve un Código de salida al finalizar su ejecución. Un código 0 (cero) indica que el comando se ejecuto en forma correcta. Cualquier código diferente, indica que ocurrió algún error en su ejecución. –
1 2 3 4 5 6 |
#!/bin/bash mkdir /prueba/test01 if [ $? -ne 0 ]; then echo "Error: Falló al crear el directorio." exit 1 fi |
2.- Dentro de un scripts bash, el comando “set -e” le indica que salga inmediatamente (detenga la ejecución) si es que encuentra un código de salida diferente a 0 (cero).- Con esto nos evitamos verificar el estado de salida de cada comando ejecutado, dentro del script :
1 2 3 4 |
#!/bin/bash set -e mkdir /prueba/test01 echo "Directorio creado exitosamente." |
3.- Mediante el comando TRAP, el cual sirve para interceptar señales y errores. Se puede especificar TRAP para ejecutar comandos específicos. En el siguiente ejemplo, TRAP captura cualquier error (señalizado por la palabra clave ERR) y ejecuta el código de manejo de errores especificado.
1 2 3 4 5 6 7 8 |
# Capturar señal Ctrl+C (SIGINT) trap "echo 'Operación cancelada'; exit" SIGINT # Limpiar al salir trap "echo 'Limpiando...'; rm -f /tmp/archivo_temp.$$" EXIT # Ignorar señal trap "" SIGTERM # Restablecer comportamiento predeterminado trap - SIGINT |
1 2 3 4 |
#!/bin/bash trap 'echo "Ocurrió un error en la línea $LINENO. Código de salida: $?. Saliendo..."; exit 1;' ERR mkdir /prueba/test01 echo "Directorio creado exitosamente." |
4.- En lugar de mostrar el error por consola, se pueden redirigir a un archivo de salida para poder revisar posteriormente.
1 2 3 4 5 6 7 8 |
#!/bin/bash exec 2>error_log.txt mkdir /prueba/test01 if [ $? -ne 0 ]; then echo "Error: Falló al crear el directorio." exit 1 fi echo "Directorio creado exitosamente." |
5.- Se puede crear una función personalizada para manejar diferentes tipos de errores, lo que añadirá flexibilidad a tus scripts.-
1 2 3 4 5 6 7 8 |
#!/bin/bash handle_error() { echo "Error en la línea $1" exit 1 } trap 'handle_error $LINENO' ERR mkdir /prueba/test01 echo "Directorio creado exitosamente." |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# Salir al primer error set -e # Detectar uso de variables no definidas set -u # Propagar errores en tuberías set -o pipefail # Todo junto (recomendado para scripts robustos) set -euo pipefail # Función de error function error_salida() { local linea=$1 local mensaje=$2 echo "Error en línea $linea: $mensaje" >&2 exit 1 } # Usar trap para capturar errores con información de línea trap 'error_salida ${LINENO} "$BASH_COMMAND"' ERR |