Comandos de Linux

Comando Bash Trap

Comando Bash Trap
Un comando bash incorporado que se usa para ejecutar un comando cuando el shell recibe cualquier señal se llama 'trampa'. Cuando ocurre cualquier evento, bash envía la notificación por cualquier señal. Muchas señales están disponibles en bash. La señal más común de bash es SIGINT (Interrupción de señal). Cuando el usuario presiona CTRL + C para interrumpir cualquier proceso desde el terminal, esta señal se envía para notificar al sistema.  En este tutorial se explica cómo puede usar el comando trap para manejar diferentes tipos de señales.

Sintaxis:

trap [-lp] [[arg] signal_spec…]

o

trampa [acción] [señal]
Clave Descripción
-l Se utiliza para mostrar la lista de todos los nombres de señales con el número correspondiente.
-pag Se utiliza para mostrar el comando de señal o el comando de trampa para signal_spec.
arg Se usa para ejecutar un comando cuando el shell recibe la (s) señal (es).
signal_spec Contiene el nombre de la señal o el número de la señal.

Comando de captura sin ninguna opción y arg

Ejecute el siguiente comando desde el terminal para mostrar la lista de todos los comandos asociados con cada condición. Si no se establece ningún comando de 'trampa' antes, el siguiente comando no mostrará ninguna información.

$ trampa

Comando de captura con la opción -l

Ejecute el siguiente comando desde el terminal para mostrar la lista de todos los nombres de señales con número.

$ trampa -l

La salida del comando anterior mostrará la lista de 64 señales con números.

Establecer comando de captura para ERR y EXIT

El siguiente primer comando establecerá un comando 'trap' que se ejecutará cuando se produzca un error de shell o se cierre el shell. Este comando de 'trampa' eliminará temperatura.TXT archivo de la ubicación actual. El comando 'ls' se usa para verificar temperatura.TXT el archivo existe o no en la ubicación actual. Finalmente Salida El comando se usa para cerrar la terminal y ejecutar el comando 'trap' que se establece antes.

$ trap 'rm temp.txt 'err salir
$ ls
$ salida

La siguiente salida aparecerá después de ejecutar los comandos anteriores.

Ahora, si el usuario abre el terminal nuevamente después de salir y ejecuta el comando 'ls', entonces temperatura.TXT el archivo no existirá.

Configure el comando 'trap' con el número de señal de SIGUP, SIGQUIT y SIGKILL

El número de señal de SIGUP, SIGQUIT y SIGKILL son 1, 3 y 9. El siguiente primer comando establecerá una trampa para estas tres señales. Cuando se produzca alguna de estas señales, aparecerá el mensaje "Se ejecuta el comando Trap"Imprimirá.  Ejecute el siguiente comando desde la terminal.

$ trap 'comando echo Trap ejecutado' 1 3 9

Cuando el usuario presione Ctrl + C para generar la señal asignada por el comando 'trap', entonces el 'eco' El comando del comando trap se ejecutará y aparecerá la siguiente salida.

Establecer el comando 'trap' para SIGTERM en un script

SIGTERM La señal se utiliza para terminar el proceso inmediatamente liberando sus recursos. Crea un archivo bash llamado 'trapscript.sh'con el siguiente código. Se declara un bucle for infinito en el script que imprimirá un texto continuamente hasta que SIGTERM se produce la señal. El usuario tiene que presionar Ctrl + Z para generar SIGTERM señal.

trapscript.sh

#!/ bin / bash
 
# Establecer una trampa para señales SIGINT y SIGTERM
trap "echo El programa está terminado."SIGTERM SIGINT
 
#Mostrar mensaje para generar SIGTERM
echo "Presione Ctrl + Z para detener el proceso"
 
#Inicializar variable de contador, i
i = 1
 
#declare infinite for loop
por(;;)
hacer
#Imprimir mensaje con contador i
echo "ejecutar el bucle por $ i veces"
# Incrementar el contador en uno
((i ++))
hecho

Ejecute el script ejecutando el siguiente comando y presione Ctrl + Z para generar SIGTERM señal. Aparecerá la siguiente salida similar.

$ bash trapscript.sh

Establecer un comando de 'trampa' para ejecutar una función basada en una señal particular

Puede asociar un comando 'trap' con cualquier función definida por el usuario. Crea una fiesta llamada trapfunc.sh y agregue el siguiente script. Aquí, una función personalizada llamada func () se declara para imprimir un mensaje simple, "Tarea terminada". Se define un bucle for-in para leer e imprimir la lista de todos los archivos y carpetas del directorio de trabajo actual. 'trampa' El comando que se define al principio de la lista llamará a la función, func () cuando el programa termina.

trapfunc.sh

#!/ bin / bash
# Llamar a la función func al salir
trap func exit
# Declara la función
function func ()
 
echo "Tarea completada"

# Leer los archivos y carpetas de la lista de directorios actual usando for loop
porque yo en *
hacer
echo "$ i"
hecho

Ejecute el script desde la terminal.

Ejecuta el script.

$ bash trapfunc.sh

El siguiente resultado muestra que, "Tarea terminada”Se imprime el texto después de imprimir todos los archivos y carpetas del directorio actual.

Conclusión

Este tutorial muestra cómo se puede usar el comando 'trap' en Linux para realizar cualquier tarea automatizada basada en la señal generada. Ayuda a los usuarios a rastrear diferentes tipos de errores y tomar las medidas adecuadas que se pueden asignar antes mediante este comando. Muchos programas o scripts asignan algunos recursos particulares cuando se ejecutan en el sistema. Si algún programa o script en ejecución sale o termina de forma anormal, los recursos utilizados por ese programa se bloquean. El comando 'trap' se puede usar para resolver este problema. La tarea de limpieza de recursos se puede realizar fácilmente usando este comando. Espero que el lector tenga una idea clara de los usos de este comando después de leer este tutorial.

Los mejores emuladores de consola de juegos para Linux
Este artículo enumerará el software de emulación de consola de juegos más popular disponible para Linux. La emulación es una capa de compatibilidad de...
Las mejores distribuciones de Linux para juegos en 2021
El sistema operativo Linux ha recorrido un largo camino desde su apariencia original, simple y basada en servidor. Este sistema operativo ha mejorado ...
Cómo capturar y transmitir su sesión de juego en Linux
En el pasado, los juegos solo se consideraban un pasatiempo, pero con el tiempo la industria del juego experimentó un gran crecimiento en términos de ...