Comando de trampa de Bash

Comando de trampa de Bash
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 del terminal, esta señal se envía para notificar al sistema. Cómo puede usar el comando trampa para manejar diferentes tipos de señales se explica en este tutorial.

Sintaxis:

trampa [-lp] [[arg] señal_spec…]

o

trampa [acción] [señal]
Llave Descripción
-l Se usa para mostrar la lista de todos los nombres de señal con el número correspondiente.
-pag Se usa para mostrar el comando de señal o el comando trampa para señal_spec.
argumento Se usa para ejecutar un comando cuando el shell recibe la (s) señal (s).
señal_spec Contiene nombre de señal o número de señal.
  • El comando de trampa sin valor arg o con el valor '-' arg reiniciará la señal especificada a su valor original.
  • El comando de trampa con el valor arg 'nulo' ignora la señal especificada enviada por el shell o el comando.
  • Una señal_spec con el valor, Salir (0) ejecutará arg después de salir del shell.
  • Una señal_spec con el valor depurar ejecutará arg antes de cada comando.
  • Una señal_spec con el valor devolver ejecutará arg cada vez que una función de shell se ejecute o un script ejecutado por ".".
  • Una señal_spec con el valor errar ejecutará Arg cada vez en la falla del comando.

Comando trampa 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 algún comando 'trampa' no se establece antes, el siguiente comando no mostrará ninguna información.

$ trampa

Comando trampa con opción -l

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

$ trampa -l

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

Establecer el comando TRAP para err y salir

El siguiente primer comando establecerá un comando 'trampa' que se ejecutará cuando ocurra cualquier error de shell o salga de shell. Este comando 'trampa' eliminará temperatura.TXT Archivo desde la ubicación actual. El comando 'ls' se usa para verificar el temperatura.TXT El archivo existe o no en la ubicación actual. Por último salida El comando se usa para cerrar el terminal y ejecutar el comando 'trampa' que se establece antes.

$ trampa 'rm tempe.TXT 'ERR EXIT
$ 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á.

Establecer el comando 'trampa' 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 ocurra cualquiera de estas señales, entonces el mensaje "El comando trampa se ejecuta"Imprimirá. Ejecute el siguiente comando desde el terminal.

$ TRAP 'ECHO TRAP COMANDO ejecutado' 1 3 9

Cuando el usuario presione Ctrl+C Para generar la señal asignada por el comando 'trampa' y luego el 'eco' Comando del comando TRAP se ejecutará y aparecerá la siguiente salida.

Establecer el comando 'trampa' para Sigterm en un script

Siglo La señal se utiliza para terminar el proceso inmediatamente al liberar sus recursos. Crear un archivo bash llamado 'trapscript.mierda'Con el siguiente código. Se declara un infinito para bucle en el script que imprimirá un texto continuamente hasta Siglo Se produce una señal. El usuario tiene que presionar CTRL+Z para generar Siglo señal.

trapscript.mierda

#!/bin/bash
# Establecer una trampa para señales Sigint y Sigterm
trampa "Echo el programa está terminado."Sigtter Sigint
#Mensaje de desplazamiento para generar Sigter
echo "Presione Ctrl+Z detener el proceso"
#Inicializar la variable de contador, yo
i = 1
#Declare Infinite para bucle
para(;;)
hacer
#Mensaje de huella con contador i
Echo "Ejecutando el bucle por $ i veces"
#Increment el mostrador por uno
((i ++))
hecho

Ejecute el script ejecutando el siguiente comando y presione ctrl+z para generar Siglo señal. Aparecerá la siguiente salida similar.

$ Bash Trapscript.mierda

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

Puede asociar un comando 'trampa' con cualquier función definida por el usuario. Crea una fiesta llamada trampa.mierda y agregue el siguiente script. Aquí, una función personalizada nombrada func () se declara 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 comienzo de la lista llamará a la función, func () Cuando el programa termina.

trampa.mierda

#!/bin/bash
# Llamar a la función FUNC al salir
trampa FUNC Salida
# Declarar la función
función func ()
echo "tarea completada"

# Lea los archivos y carpetas de la lista de directorio actual usando para bucle
Porque yo en *
hacer
echo "$ i"
hecho

Ejecute el script desde el terminal.

Ejecutar el guión.

$ bash trapfunc.mierda

La siguiente salida muestra que, "Tarea terminadaEl texto se imprime después de imprimir todos los archivos y carpetas del directorio actual.

Conclusión

Este tutorial muestra cómo el comando 'trampa' se puede usar en Linux para hacer cualquier tarea automatizada basada en la señal generada. Ayuda a los usuarios a rastrear diferentes tipos de errores y tomar medidas adecuadas que se puedan asignar antes utilizando este comando. Muchos programas o scripts asignan algunos recursos particulares cuando se ejecutan en el sistema. Si algún programa en ejecución o salida de script o rescinden de manera anormal, los recursos utilizados por ese programa están bloqueados. El comando 'trampa' se puede usar para resolver este problema. La tarea de limpieza de recursos se puede hacer fácilmente utilizando este comando. Espero que el lector obtendrá una idea clara de los usos de este comando después de leer este tutorial.