GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Bash-Trap-Befehl erklärt

Einführung

Ein Shell-Skript kann während seiner Ausführung auf Probleme stoßen, was zu einem Fehlersignal führt, das das Skript unerwartet unterbricht.

Fehler treten aufgrund eines fehlerhaften Skriptdesigns, Benutzeraktionen oder Systemausfällen auf. Ein fehlgeschlagenes Skript kann temporäre Dateien hinterlassen, die Probleme verursachen, wenn ein Benutzer das Skript neu startet.

Dieses Tutorial zeigt Ihnen, wie Sie die trap verwenden Befehl, um sicherzustellen, dass Ihre Skripts immer vorhersehbar beendet werden.

Voraussetzungen

  • Zugriff auf das Terminal/die Befehlszeile.
  • Ein Texteditor (Nano, Vi/Vim usw.).

Bash-Trap-Syntax

Die Syntax für trap Befehl ist:

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

Der Befehl hat die folgenden Komponenten:

  • Optionen bieten zusätzliche Funktionalität für den Befehl.
  • Argumente sind die Befehle trap wird ausgeführt, wenn ein Signal erkannt wird. Sofern der Befehl nicht nur aus einem Wort besteht, sollte er in Anführungszeichen gesetzt werden (" " ). Wenn das Argument mehr als einen Befehl enthält, trennen Sie diese mit einem Semikolon (; ).
  • Signale sind vom System gesendete asynchrone Benachrichtigungen, die normalerweise auf eine benutzergenerierte oder systembedingte Unterbrechung hinweisen. Signale können mit ihrem Namen oder ihrer Nummer aufgerufen werden.

Bash-Trap-Optionen

Die trap Der Befehl akzeptiert die folgenden Optionen:

  • -p - Zeigt Signalbefehle an.
  • -l - Druckt eine Liste aller Signale und ihrer Nummern.

Nachfolgend finden Sie die vollständige Liste der 64 Signale und ihrer Nummern:

# Signal # Signal # Signal
1 SIGHUP 23 SIGURG 45 SIGRTMIN+11
2 SIGNAL 24 SIGXCPU 46 SIGRTMIN+12
3 SIGQUIT 25 SIGXFSZ 47 SIGRTMIN+13
4 Siegel 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 SIGWAITING 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 SIGCONT 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

Die Signale, die am häufigsten mit der trap verwendet werden Befehle sind:

  • SIGHUP (1) - Sauberes Aufräumen
  • SIGINT (2) - Unterbrechung
  • SIGQUIT (3) - Beenden
  • SIGABRT (6) - Abbrechen
  • SIGALRM (14) - Wecker
  • SIGTERM (15) - Beenden

Wie man Trap in Bash verwendet

Ein typisches Szenario für die Verwendung der trap Befehl fängt das SIGINT ab Signal. Dieses Signal wird vom System gesendet, wenn der Benutzer die Ausführung des Skripts durch Drücken von Strg+C unterbricht .

Das folgende Beispielskript gibt das Wort „Test aus " jede Sekunde, bis der Benutzer sie mit Strg+C unterbricht . Das Skript gibt dann eine Nachricht aus und wird beendet.

trap "echo The script is terminated; exit" SIGINT

while true
do
    echo Test
    sleep 1
done

Das while Schleife im obigen Beispiel wird unendlich ausgeführt. Die erste Zeile des Skripts enthält die trap Befehl und die Anweisung, auf den SIGINT zu warten signalisieren, dann die Nachricht drucken und das Skript beenden.

Die trap Der Befehl wird häufig verwendet, um temporäre Dateien zu bereinigen, wenn das Skript aufgrund einer Unterbrechung beendet wird. Das folgende Beispiel definiert die cleanup Funktion, die eine Meldung ausgibt, entfernt alle Dateien, die zu $TRASH hinzugefügt wurden Variable und beendet das Skript.

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

trap cleanup 1 2 3 6

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

...

Die trap führt im obigen Beispiel die cleanup aus Funktion, wenn es eines der vier Signale erkennt:SIGHUP , SIGINT , SIGQUIT , oder SIGABRT . Die Signale werden mit ihrer Nummer bezeichnet.

Sie können auch trap verwenden um sicherzustellen, dass der Benutzer die Skriptausführung nicht unterbrechen kann. Diese Funktion ist wichtig, wenn sensible Befehle ausgeführt werden, deren Unterbrechung das System dauerhaft beschädigen kann. Die Syntax zum Deaktivieren eines Signals lautet:

trap "" [signal]

Doppelte Anführungszeichen bedeuten, dass kein Befehl ausgeführt wird. Zum Beispiel, um SIGINT abzufangen und SIGABRT geben Sie Folgendes ein:

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

Wenn Sie die Signale zu irgendeinem Zeitpunkt während des Skripts wieder aktivieren möchten, setzen Sie die Regeln zurück, indem Sie das Bindestrich-Symbol verwenden:

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

Linux
  1. Bash Math Operationen (Bash Arithmetik) erklärt

  2. Bash-Wartebefehl

  3. Verlaufsbefehl in Linux ausführlich erklärt

  4. Bash-Exportbefehl

  5. Führen Sie den Bash-Befehl auf der Jenkins-Pipeline aus

Bash Echo-Befehl mit Beispielen in Linux erklärt

Bash-Scripting – Printf-Befehl mit Beispielen erklärt

Bash-Skripting (II)

Arping-Befehl unter Linux erklärt

Der Linux-Move-Befehl:Erklärt &leicht gemacht!

AWS S3 cp-Befehl erklärt