GNU/Linux >> Tutoriales Linux >  >> Linux

Explicación del comando Bash trap

Introducción

Un script de shell puede tener problemas durante su ejecución, lo que da como resultado una señal de error que interrumpe el script de forma inesperada.

Los errores ocurren debido a un diseño de script defectuoso, acciones del usuario o fallas del sistema. Una secuencia de comandos que falla puede dejar archivos temporales que causan problemas cuando un usuario reinicia la secuencia de comandos.

Este tutorial le mostrará cómo usar la trap comando para asegurarse de que sus secuencias de comandos siempre salgan de manera predecible.

Requisitos previos

  • Acceso a la terminal/línea de comando.
  • Un editor de texto (Nano, Vi/Vim, etc.).

Sintaxis de trampa Bash

La sintaxis de la trap el comando es:

trap [options] "[arguments]" [signals]

El comando tiene los siguientes componentes:

  • Opciones proporcionar funcionalidad adicional al comando.
  • Argumentos son los comandos trap se ejecuta al detectar una señal. A menos que el comando sea solo una palabra, debe estar entre comillas (" " ). Si el argumento contiene más de un comando, sepárelos con un punto y coma (; ).
  • Señales son notificaciones asincrónicas enviadas por el sistema, que generalmente indican una interrupción generada por el usuario o relacionada con el sistema. Las señales se pueden llamar por su nombre o número.

Opciones de trampa de golpes

La trap El comando acepta las siguientes opciones:

  • -p - Muestra comandos de señal.
  • -l - Imprime una lista de todas las señales y sus números.

A continuación se muestra la lista completa de las 64 señales y sus números:

Las señales más utilizadas con la trap comando son:

  • SIGHUP (1) - Ordenar la limpieza
  • SIGINT (2) - Interrumpir
  • SIGQUIT (3) - Salir
  • SIGABRT (6) - Cancelar
  • SIGALRM (14) - Despertador
  • SIGTERM (15) - Terminar

Cómo usar trap en Bash

Un escenario típico para usar la trap el comando captura el SIGINT señal. Esta señal la envía el sistema cuando el usuario interrumpe la ejecución del script pulsando Ctrl+C .

El siguiente script de ejemplo imprime la palabra "Prueba " cada segundo hasta que el usuario lo interrumpe con Ctrl+C . El script luego imprime un mensaje y se cierra.

trap "echo The script is terminated; exit" SIGINT

while true
do
    echo Test
    sleep 1
done

El while loop en el ejemplo anterior se ejecuta infinitamente. La primera línea del script contiene la trap comando y las instrucciones para esperar el SIGINT señal, luego imprima el mensaje y salga del script.

La trap El comando se usa con frecuencia para limpiar archivos temporales si el script se cierra debido a una interrupción. El siguiente ejemplo define la cleanup función, que imprime un mensaje, elimina todos los archivos agregados a la $TRASH y sale del script.

$TRASH=$(mktemp -t tmp.XXXXXXXXXX)

trap cleanup 1 2 3 6

cleanup()
{
  echo "Removing temporary files:"
  rm -rf "$TRASH"
  exit
}

...

La trap en el ejemplo anterior ejecuta la cleanup funciona cuando detecta una de las cuatro señales:SIGHUP , SIGINT , SIGQUIT o SIGABRT . Las señales se denominan por su número.

También puedes usar trap para garantizar que el usuario no pueda interrumpir la ejecución del script. Esta característica es importante cuando se ejecutan comandos sensibles cuya interrupción puede dañar permanentemente el sistema. La sintaxis para deshabilitar una señal es:

trap "" [signal]

Las comillas dobles significan que no se ejecutará ningún comando. Por ejemplo, para atrapar el SIGINT y SIGABRT señales, escriba:

trap "" SIGINT SIGABRT
[a command that must not be interrupted]

Si desea volver a habilitar las señales en cualquier momento durante la secuencia de comandos, restablezca las reglas usando el símbolo del guión:

trap - SIGINT SIGABRT
[a command that can be interrupted]

Linux
  1. Explicación de las operaciones matemáticas de Bash (aritmética de Bash)

  2. Comando de espera bash

  3. Comando de historial en Linux explicado en profundidad

  4. comando de exportación bash

  5. Ejecute el comando bash en la canalización de jenkins

Comando Bash Echo explicado con ejemplos en Linux

Bash Scripting - Comando Printf explicado con ejemplos

Script Bash (II)

Comando Arping en Linux explicado

El comando Move de Linux:¡Explicado y simplificado!

Explicación del comando cp de AWS S3

    # Señal # Señal # Señal
    1 SUSCRIBIR 23 SIGURG 45 SIGRTMIN+11
    2 SIGINT 24 CPU SIGX 46 SIGRTMIN+12
    3 SIGQUIT 25 SIGXFSZ 47 SIGRTMIN+13
    4 SIGILL 26 SIGVTALRM 48 SIGRTMIN+14
    5 SIGTRAP 27 PROF SIG 49 SIGRTMIN+15
    6 SIGABRT 28 SIGWINCH 50 SIGRTMAX-14
    7 SIGBUS 29 SIGIO 51 SIGRTMAX-13
    8 SIGFPE 30 SIGPWR 52 SIGRTMAX-12
    9 SIGKILL 31 SIGSYS 53 SIGRTMAX-11
    10 SIGUSR1 32 SIGWAIING 54 SIGRTMAX-10
    11 SIGSEGV 33 SIGLWP 55 SIGRTMAX-9
    12 SIGUSR2 34 SIGRTMIN 56 SIGRTMAX-8
    13 SIGPIPE 35 SIGRTMIN+1 57 SIGRTMAX-7
    14 SIGALRM 36 SIGRTMIN+2 58 SIGRTMAX-6
    15 SIGTERM 37 SIGRTMIN+3 59 SIGRTMAX-5
    16 SIGSTKFLT 38 SIGRTMIN+4 60 SIGRTMAX-4
    17 SIGCHLD 39 SIGRTMIN+5 61 SIGRTMAX-3
    18 CONT SIGNO 40 SIGRTMIN+6 62 SIGRTMAX-2
    19 SIGSTOP 41 SIGRTMIN+7 63 SIGRTMAX-1
    20 SIGTSTP 42 SIGRTMIN+8 64 SIGRTMAX
    21 INICIAR SESIÓN 43 SIGRTMIN+9
    22 SIGTTOU 44 SIGRTMIN+10