GNU/Linux >> Linux Esercitazione >  >> Linux

Spiegazione del comando della trappola

Introduzione

Uno script di shell può incorrere in problemi durante la sua esecuzione, risultando in un segnale di errore che interrompe lo script in modo imprevisto.

Gli errori si verificano a causa di una progettazione errata dello script, delle azioni dell'utente o di errori di sistema. Uno script che non riesce può lasciare file temporanei che causano problemi quando un utente riavvia lo script.

Questo tutorial ti mostrerà come usare la trap comando per garantire che i tuoi script escano sempre in modo prevedibile.

Prerequisiti

  • Accesso al terminale/riga di comando.
  • Un editor di testo (Nano, Vi/Vim, ecc.).

Sintassi trappole esplosive

La sintassi per il trap il comando è:

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

Il comando ha i seguenti componenti:

  • Opzioni fornire funzionalità aggiuntive al comando.
  • Argomenti sono i comandi trap viene eseguito al rilevamento di un segnale. A meno che il comando non sia una sola parola, dovrebbe essere racchiuso tra virgolette (" " ). Se l'argomento contiene più di un comando, separali con un punto e virgola (; ).
  • Segnali sono notifiche asincrone inviate dal sistema, che in genere indicano un'interruzione generata dall'utente o correlata al sistema. I segnali possono essere chiamati per nome o numero.

Opzioni trappole esplosive

La trap comando accetta le seguenti opzioni:

  • -p - Visualizza i comandi del segnale.
  • -l - Stampa un elenco di tutti i segnali e dei loro numeri.

Di seguito è riportato l'elenco completo dei 64 segnali e dei loro numeri:

# Segnale # Segnale # Segnale
1 SIGHUP 23 SIGURG 45 SIGRTMIN+11
2 SEGNO 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 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

I segnali più comunemente usati con la trap comando sono:

  • SIGHUP (1) - Riordino pulito
  • SIGINT (2) - Interruzione
  • SIGQUIT (3) - Esci
  • SIGABRT (6) - Annulla
  • SIGALRM (14) - Sveglia
  • SIGTERM (15) - Termina

Come usare la trappola in Bash

Uno scenario tipico per l'utilizzo della trap il comando sta rilevando il SIGINT segnale. Questo segnale viene inviato dal sistema quando l'utente interrompe l'esecuzione dello script premendo Ctrl+C .

Il seguente script di esempio stampa la parola "Test " ogni secondo finché l'utente non lo interrompe con Ctrl+C . Lo script quindi stampa un messaggio e si chiude.

trap "echo The script is terminated; exit" SIGINT

while true
do
    echo Test
    sleep 1
done

Il while il ciclo nell'esempio sopra viene eseguito all'infinito. La prima riga dello script contiene il trap comando e le istruzioni per attendere il SIGINT signal, quindi stampa il messaggio ed esci dallo script.

La trap Il comando viene spesso utilizzato per ripulire i file temporanei se lo script si chiude a causa di un'interruzione. L'esempio seguente definisce la cleanup la funzione, che stampa un messaggio, rimuove tutti i file aggiunti al $TRASH variabile ed esce dallo script.

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

trap cleanup 1 2 3 6

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

...

La trap nell'esempio sopra, esegue la cleanup funzione quando rileva uno dei quattro segnali:SIGHUP , SIGINT , SIGQUIT o SIGABRT . I segnali sono indicati dal loro numero.

Puoi anche usare trap per garantire che l'utente non possa interrompere l'esecuzione dello script. Questa caratteristica è importante quando si eseguono comandi sensibili la cui interruzione può danneggiare permanentemente il sistema. La sintassi per disabilitare un segnale è:

trap "" [signal]

Le virgolette doppie indicano che non verrà eseguito alcun comando. Ad esempio, per intercettare il SIGINT e SIGABRT segnali, digitare:

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

Se desideri riattivare i segnali in qualsiasi momento durante lo script, ripristina le regole utilizzando il simbolo del trattino:

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

Linux
  1. Spiegazione delle operazioni matematiche di Bash (aritmetica di Bash).

  2. Bash wait Comando

  3. Spiegazione approfondita del comando della cronologia in Linux

  4. comando di esportazione bash

  5. Esegui il comando bash sulla pipeline jenkins

Comando Bash Echo spiegato con esempi in Linux

Scripting Bash – Spiegazione del comando Printf con esempi

Script Bash(II)

Spiegazione del comando Arping su Linux

Il comando di spostamento di Linux:spiegato e semplificato!

Spiegazione del comando AWS S3 cp