Cómo detectar y manejar errores en sus scripts bash
- 4677
- 346
- Mateo Pantoja
Podemos usar el comando TRAP para captar el sistema de señal de error por el sistema durante la ejecución del script. Entonces puede ejecutar un comando shell o llamar a una función. De esta manera, puede ejecutar su código de script personalizado en un error que ocurrió en un script bash.
Esto puede ser útil para revertir cualquier cambio parcial, cerrar conexiones de bases de datos o estado de correo electrónico a las personas en cuestión, etc. Puedes usar comandos de trampa con 'ERRAR' Señales como:
trampa 'on_error_function' err
Cuando se genera un error en un script de shell, ejecutará una función llamada 'on_error_function' de su script de shell. En lugar de llamar a una función, simplemente puede ejecutar un comando también.
Ejemplo: ejecute una función en error en bash
Entendamos con un ejemplo. Crear un script de shell de muestra y crear una función con cualquier nombre. Luego agregue el trampa
comando con la función para ERRAR señal. A continuación, agregue un comando simple que genera un error.
123456789 | #!/usr/bin/env Bash on_error () echo "Se produjo algún error" trap 'on_error' err ls ~/dir_not_exists |
Ejecute el script anterior y debería ver los resultados a continuación:
Salida: ls: no se puede acceder a '/home/tecadmin/dir_not_exists': no se produjo dicho archivo o directorio, se produjo algún error
Puede ver que el error está atrapado y la función on_error ()
se ejecuta por el script bash.
Ejemplo: ejecute un comando en error en bash
Veamos un ejemplo más. Aquí ejecutaremos un comando cuando se produzca cualquier error en el script de shell.
#!/usr/bin/env Bash trampa 'echo ohhh no!'Err ls ~/dir_not_exists12345 | #!/usr/bin/env Bash trampa 'echo ohhh no!'Err ls ~/dir_not_exists |
En el script anterior, no definimos ninguna función separada. Simplemente ejecute un comando echo en error. Ejecutar el script anterior y ver los resultados.
Salida: ls: no puede acceder a '/home/tecadmin/dir_not_exists': no hay dicho archivo o directorio ohhh no!
Ejemplo: Obtener el número de errores de línea ocurrido
También puede averiguar el número de línea, donde el error ocurrió en el script bash junto con el nombre del script. Para hacer esto, use la 'persona que llama' incorporada a Bash.
#!/usr/bin/env Bash on_error () echo "Error encontrado en: $ (Caller)"> & 2 Trap 'on_error' err ls ~/dir_not_exists123456789 | #!/usr/bin/env Bash on_error () echo "Error encontrado en: $ (Caller)"> & 2 Trap 'on_error' err ls ~/dir_not_exists |
Ejecutar el script anterior y ver los resultados. Verá el nombre del script y el número de línea, donde ocurrió el error.
Salida: LS: No se puede acceder a '/home/tecadmin/dir_not_exists': no se encuentra dicho archivo o error de directorio en: 9 ./guion.mierda
Conclusión
Gracias por leer este artículo. Con suerte, este tutorial te ayuda con una mejor escritura de scripts de shell captando el error y tomando algo de acción.
Además, recuerde que la trampa ERR atrapa solo los errores de tiempo de ejecución. Como si algún comando devuelve el código de estado distinto de cero. No capta los errores de sintaxis, porque en el caso del error de sintaxis, el script falla sin ejecutar ningún comando.
- « Ejecutando múltiples comandos a la vez en Linux
- (Resuelto) Collation desconocido UTF8MB4_UNICODE_520_CI »