Depuración de scripts de Bash (set -x, trap)
Descubra métodos para depurar sus scripts de Bash, incluido el rastreo de la ejecución y el uso de «trap» para gestionar errores.
Depuración de scripts de Bash (set -x, trap) es una lección gratuita de Linux Command Line & Bash Scripting Mastery en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Linux Command Line & Bash Scripting Mastery, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Linux Command Line & Bash Scripting Mastery incluye 4 lecciones en total.
¿Por qué depurar los scripts?
¡Hasta los mejores scripts pueden tener errores! La depuración es el proceso de encontrar y corregir estos errores.
Es una habilidad fundamental para cualquier desarrollador, ya que le ayuda a entender paso a paso qué hace su script y dónde pueden estar surgiendo los problemas.
En esta lección, aprenderá a usar potentes herramientas de Bash para rastrear la ejecución y gestionar eventos inesperados.
Rastree su script con `set -x`
Una de las herramientas de depuración más sencillas y eficaces de Bash es set -x. Esta opción activa el rastreo de comandos.
- Cuando está activa, Bash imprime cada comando y sus argumentos en la salida de error estándar (que normalmente es su terminal) justo antes de ejecutarlo.
- Esta salida incluye el estado de las variables después de la expansión, lo que le permite ver claramente qué está a punto de hacer Bash.
- ¡Es como observar la ejecución de su script a cámara lenta!
Vea `set -x` en acción
Veamos set -x en acción. Observe cómo el shell imprime cada comando después de expandir las variables, precedido por un signo +.
Pruebe a ejecutar este ejemplo:
#!/bin/bash
# Enable command tracing
set -x
NAME="Coddy"
MESSAGE="Hello, $NAME!"
echo $MESSAGE
# This command will intentionally fail
ls -l /nonexistent_directory
# Disable command tracing
set +x
echo "Tracing is now off."Comprenda la salida del rastreo
Cuando set -x está activado, verá líneas que comienzan con el símbolo +. Esto indica una salida de rastreo.
- Después de
+aparece el comando que Bash está a punto de ejecutar, junto con sus argumentos después de cualquier sustitución de variables o comandos. - Esto resulta muy útil para ver los valores exactos de las variables y el comando preciso que se está ejecutando.
- Ayuda a localizar problemas como rutas incorrectas, variables vacías o estructuras de comandos no deseadas.
Controle el alcance de `set -x`
No siempre es necesario rastrear todo el script. Puede activar set -x para secciones específicas:
- Use
set -xpara activar el rastreo. - Use
set +xpara desactivarlo.
Así podrá concentrar sus esfuerzos de depuración en las partes problemáticas del script sin verse abrumado por la salida de las secciones estables.
Gestione eventos con `trap`
El comando trap permite capturar señales y otros eventos y, después, ejecutar un comando cuando ocurren. Resulta muy útil para:
- Limpieza: Garantizar que se eliminen los archivos temporales.
- Gestión de errores: Responder a comandos fallidos.
- Salidas controladas: Gestionar interrupciones del usuario, como Ctrl+C.
La sintaxis básica es trap 'command_to_execute' SIGNAL_OR_EVENT.
Limpie con `trap EXIT`
La pseudoseñal EXIT es especial. Un comando asociado a EXIT se ejecutará justo antes de que termine el script, independientemente de cómo finalice (con éxito, por un error o debido a una interrupción).
Esto resulta perfecto para tareas de limpieza, como eliminar archivos temporales. Pruebe a ejecutar este script:
#!/bin/bash
TEMP_FILE="/tmp/coddy_temp_$(date +%s).txt"
# Trap the EXIT signal to remove the temp file
trap 'echo "Cleaning up: Removing $TEMP_FILE"; rm -f "$TEMP_FILE"' EXIT
echo "Script started. Creating temporary file..."
touch "$TEMP_FILE"
echo "Temporary file created: $TEMP_FILE"
# Simulate some work
sleep 2
echo "Script logic completed. Exiting..."Capture errores con `trap ERR`
La pseudoseñal ERR se activa cuando un comando termina con un estado distinto de cero (es decir, cuando falla). Esto permite realizar acciones específicamente cuando ocurre un error.
Nota: trap ERR solo funciona si el comando no forma parte de una condición if, while o until, ni se comprueba explícitamente su valor de retorno (por ejemplo, command || true).
#!/bin/bash
# Trap ERR to report the error line number
trap 'echo "Error detected on line $LINENO! Exiting."' ERR
echo "Starting script with an intentional error..."
# This command will fail and trigger the ERR trap
ls /this/path/does/not/exist
echo "This line will NOT be reached if an error occurs."Responda a las señales (INT, TERM)
trap también puede capturar señales estándar de Linux. Algunas habituales son:
INT(interrupción): Se envía al pulsarCtrl+C.TERM(terminación): Solicita que un proceso termine de forma controlada.
La captura de estas señales permite que el script realice tareas de limpieza o guarde su estado antes de apagarse, en lugar de finalizar de forma abrupta.
#!/bin/bash
# Trap INT (Ctrl+C) to exit gracefully
trap 'echo "\nCaught Ctrl+C! Exiting gracefully..."; exit 1' INT
echo "Running a continuous task. Press Ctrl+C to stop."
while true; do
echo "Working... $(date)"
sleep 3
doneCompruebe sus conocimientos de depuración
Compruebe su comprensión de las técnicas de depuración de Bash.
Repaso: depuración de sus scripts
¡Excelente trabajo! Ha aprendido herramientas esenciales para depurar sus scripts de Bash:
set -x: Activa el rastreo de comandos y muestra exactamente qué ejecuta Bash. Useset +xpara desactivarlo.trap: Permite ejecutar comandos en respuesta a eventos o señales específicos.- `trap EXIT`: Garantiza que las tareas de limpieza se ejecuten antes de que termine el script.
- `trap ERR`: Captura los comandos que terminan con un estado distinto de cero.
- `trap INT`/`TERM`: Gestiona de forma controlada las interrupciones del usuario o las solicitudes de terminación.
Dominar estas técnicas mejorará considerablemente su capacidad para solucionar problemas y crear scripts de Bash robustos.
Preguntas frecuentes
¿La lección «Depuración de scripts de Bash (set -x, trap)» es gratis?
Sí — el texto completo de «Depuración de scripts de Bash (set -x, trap)» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Linux Command Line & Bash Scripting Mastery, actualiza a CoddyKit PRO. El curso de Linux Command Line & Bash Scripting Mastery incluye 4 lecciones en total.
¿Qué aprenderé en «Depuración de scripts de Bash (set -x, trap)»?
Descubra métodos para depurar sus scripts de Bash, incluido el rastreo de la ejecución y el uso de «trap» para gestionar errores. Practicas Linux Command Line & Bash Scripting Mastery con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Linux Command Line & Bash Scripting Mastery?
No se requiere experiencia previa. Linux Command Line & Bash Scripting Mastery en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «Depuración de scripts de Bash (set -x, trap)»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Linux Command Line & Bash Scripting Mastery?
Sí. Cada lección de Linux Command Line & Bash Scripting Mastery incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Depuración de scripts de Bash (set -x, trap)
- Gestión de errores y estado de salida
- Buenas prácticas y linting en scripts
- Pruebas de scripts de Bash con Bats