GNU/Linux >> Tutoriels Linux >  >> Linux

Explication de la commande Bash Trap

Présentation

Un script shell peut rencontrer des problèmes lors de son exécution, ce qui entraîne un signal d'erreur qui interrompt le script de manière inattendue.

Les erreurs se produisent en raison d'une conception de script défectueuse, d'actions de l'utilisateur ou de défaillances du système. Un script qui échoue peut laisser derrière lui des fichiers temporaires qui causent des problèmes lorsqu'un utilisateur redémarre le script.

Ce tutoriel vous montrera comment utiliser le trap pour vous assurer que vos scripts se terminent toujours de manière prévisible.

Prérequis

  • Accès au terminal/ligne de commande.
  • Un éditeur de texte (Nano, Vi/Vim, etc.).

Syntaxe du piège bash

La syntaxe du trap la commande est :

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

La commande a les composants suivants :

  • Options fournir des fonctionnalités supplémentaires à la commande.
  • Argumentation sont les commandes trap s'exécute lors de la détection d'un signal. À moins que la commande ne comporte qu'un seul mot, elle doit être entourée de guillemets (" " ). Si l'argument contient plusieurs commandes, séparez-les par un point-virgule (; ).
  • Signaux sont des notifications asynchrones envoyées par le système, indiquant généralement une interruption générée par l'utilisateur ou liée au système. Les signaux peuvent être appelés par leur nom ou leur numéro.

Options de piège bash

Le trap La commande accepte les options suivantes :

  • -p - Affiche les commandes de signal.
  • -l - Imprime une liste de tous les signaux et leurs numéros.

Ci-dessous la liste complète des 64 signaux et leurs numéros :

# Signal # Signal # Signal
1 SIGHUP 23 SIGURG 45 SIGRTMIN+11
2 SIGINT 24 SIGXCPU 46 SIGRTMIN+12
3 SIGQUIT 25 SIGXFSZ 47 SIGRTMIN+13
4 SIGILL 26 SIGVTALRM 48 SIGRTMIN+14
5 SIGTRAP 27 SIGPROF 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 SIGATTENTE 54 SIGRTMAX-10
11 SIGSEGV 33 SIGNALWP 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 SIGCON 40 SIGRTMIN+6 62 SIGRTMAX-2
19 SIGSTOP 41 SIGRTMIN+7 63 SIGRTMAX-1
20 SIGTSTP 42 SIGRTMIN+8 64 SIGRTMAX
21 SIGTTIN 43 SIGRTMIN+9
22 SIGTTOU 44 SIGRTMIN+10

Les signaux les plus couramment utilisés avec le trap commande sont :

  • SIGHUP (1) - Rangement propre
  • SIGINT (2) - Interrompre
  • SIGQUIT (3) - Quitter
  • SIGABRT (6) - Annuler
  • SIGALRM (14) - Réveil
  • SIGTERM (15) - Terminer

Comment utiliser le piège dans Bash

Un scénario typique d'utilisation du trap la commande attrape le SIGINT signal. Ce signal est envoyé par le système lorsque l'utilisateur interrompt l'exécution du script en appuyant sur Ctrl+C .

L'exemple de script suivant imprime le mot "Test " toutes les secondes jusqu'à ce que l'utilisateur l'interrompe avec Ctrl+C . Le script affiche alors un message et se ferme.

trap "echo The script is terminated; exit" SIGINT

while true
do
    echo Test
    sleep 1
done

Le while loop dans l'exemple ci-dessus s'exécute à l'infini. La première ligne du script contient le trap commande et les instructions pour attendre le SIGINT signal, puis imprimez le message et quittez le script.

Le trap La commande est fréquemment utilisée pour nettoyer les fichiers temporaires si le script se termine en raison d'une interruption. L'exemple suivant définit le cleanup fonction, qui imprime un message, supprime tous les fichiers ajoutés au $TRASH variable et quitte le script.

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

trap cleanup 1 2 3 6

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

...

Le trap dans l'exemple ci-dessus exécute le cleanup fonctionne lorsqu'il détecte l'un des quatre signaux :SIGHUP , SIGINT , SIGQUIT , ou SIGABRT . Les signaux sont désignés par leur numéro.

Vous pouvez également utiliser trap pour s'assurer que l'utilisateur ne peut pas interrompre l'exécution du script. Cette fonctionnalité est importante lors de l'exécution de commandes sensibles dont l'interruption peut endommager définitivement le système. La syntaxe pour désactiver un signal est :

trap "" [signal]

Les guillemets doubles signifient qu'aucune commande ne sera exécutée. Par exemple, pour piéger le SIGINT et SIGABRT signaux, tapez :

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

Si vous souhaitez réactiver les signaux à tout moment pendant le script, réinitialisez les règles en utilisant le symbole du tiret :

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

Linux
  1. Explication des opérations mathématiques bash (arithmétique bash)

  2. Commande d'attente bash

  3. La commande d'historique sous Linux expliquée en profondeur

  4. commande d'exportation bash

  5. Exécutez la commande bash sur le pipeline jenkins

La commande Bash Echo expliquée avec des exemples sous Linux

Bash Scripting - Commande Printf expliquée avec des exemples

Script bash (II)

Explication de la commande Arping sur Linux

La commande de déplacement Linux :expliquée et simplifiée !

Explication de la commande AWS S3 cp