Comando Bash Trap

Comando Bash Trap
Un comando bash integrato che viene utilizzato per eseguire un comando quando la shell riceve qualsiasi segnale viene chiamato "trap". Quando si verifica qualsiasi evento, Bash invia la notifica con qualsiasi segnale. Molti segnali sono disponibili in bash. Il segnale più comune di Bash è Sigint (Segnali Interrupt). Quando l'utente preme CTRL+C per interrompere qualsiasi processo dal terminale, questo segnale viene inviato per avvisare il sistema. Come puoi usare il comando trap per gestire diversi tipi di segnali è spiegato in questo tutorial.

Sintassi:

trap [-lp] [[arg] segnale_spec…]

O

trap [azione] [segnale]
Chiave Descrizione
-l Viene utilizzato per visualizzare l'elenco di tutti i nomi del segnale con numero corrispondente.
-P Viene utilizzato per visualizzare il comando di segnale o il comando trap per segnale_spec.
arg Viene utilizzato per eseguire un comando quando la shell riceve il segnale / i.
segnale_spec Contiene il nome del segnale o il numero di segnale.
  • Comando trap senza valore arg o con '-' Il valore arg verrà ripristinato il segnale specificato al suo valore originale.
  • Il comando trap con il valore arg "null" ignore il segnale specificato inviando dalla shell o comando.
  • Un segnale_spec con il valore, uscita (0) eseguirà l'arg dopo essere uscito dalla shell.
  • Un segnale_spec con il valore debug eseguirà Arg prima di ogni singolo comando.
  • Un segnale_spec con il valore ritorno eseguirà l'arg ogni volta quando una funzione shell esegue o uno script eseguito da ".".
  • Un segnale_spec con il valore err eseguirà l'arg ogni volta sull'errore di comando.

Comando trap senza alcuna opzione e arg

Esegui il comando seguente dal terminale per visualizzare l'elenco di tutti i comandi associati a ciascuna condizione. Se un comando "trap" non è impostato prima, il seguente comando non visualizzerà alcuna informazione.

$ trap

Comando trap con -l opzione

Esegui il comando seguente dal terminale per visualizzare l'elenco di tutti i nomi del segnale con il numero.

$ trap -l

L'output del comando sopra mostrerà l'elenco di 64 segnali con numeri.

Imposta il comando trap per err e uscita

Il seguente primo comando imposterà un comando 'trap' che eseguirà quando si verifica qualsiasi errore di shell o esci di shell. Questo comando 'trap' rimuoverà temp.TXT File dalla posizione corrente. Il comando 'LS' viene utilizzato per controllare il temp.TXT Il file esiste o meno nella posizione corrente. da ultimo Uscita Il comando viene utilizzato per chiudere il terminale ed eseguire il comando "trap" che è impostato prima.

$ trap 'rm temp.txt 'err ust
$ ls
$ uscita

La seguente output apparirà dopo aver eseguito i comandi sopra.

Ora, se l'utente apre nuovamente il terminale dopo l'uscita ed esegue il comando "LS", allora temp.TXT Il file non esisterà.

Imposta comando 'trap' con numero di segnale di Sigup, Sigquit e Sigkill

Il numero di segnale di Sigup, SIGQUIT E Sigkill sono 1, 3 e 9. Il seguente primo comando imposterà una trappola per questi tre segnali. Quando si verificherà uno di questi segni, il messaggio "Il comando trap viene eseguito"Stamparò. Esegui il seguente comando dal terminale.

$ trap 'comando echo trap eseguito' 1 3 9

Quando l'utente premi Ctrl+c Per generare il segnale assegnato dal comando 'trap' quindi il 'eco' Il comando comando di trap verrà eseguito e verrà visualizzato il seguente output.

Imposta comando 'trap' per Sigterm in uno script

Sigterm Il segnale viene utilizzato per terminare immediatamente il processo rilasciando le sue risorse. Crea un file bash chiamato 'trapposizione.sh'Con il seguente codice. Un loop infinito viene dichiarato nello script che stamperà un testo continuamente fino a Sigterm Il segnale si verifica. L'utente deve premere Ctrl+z generare Sigterm segnale.

trapposizione.sh

#!/Bin/Bash
# Imposta una trappola per i segnali Sigint e Sigterm
trap "echo Il programma è terminato."Sigterm Sigint
#Display messaggio per generare sigterm
Echo "Premere Ctrl+Z Stop il processo"
#Initialize Counter variabile, i
i = 1
#declare Infinite for Loop
per(;;)
Fare
#Print Messaggio con il contatore I
Echo "Esegui il loop per $ i volte"
#Increment il contatore di uno
((i ++))
Fatto

Esegui lo script eseguendo il seguente comando e premere Ctrl+Z per generare Sigterm segnale. Verrà visualizzato il seguente output simile.

$ Bash Trapscript.sh

Imposta un comando "trap" per eseguire una funzione basata su un segnale particolare

È possibile associare un comando "trap" a qualsiasi funzione definita dall'utente. Crea un Bash chiamato trapfunc.sh e aggiungi il seguente script. Qui, una funzione personalizzata denominata func () si dichiara di stampare un semplice messaggio, "Attività completata". Un loop per in-in è definito per leggere e stampare l'elenco di tutti i file e le cartelle della directory di lavoro corrente. 'trappola' Il comando definito all'inizio dell'elenco chiamerà la funzione, func () Quando il programma termina.

trapfunc.sh

#!/Bin/Bash
# Chiama la funzione Func all'uscita
Trap func uscita
# Dichiara la funzione
funzione func ()
Echo "attività completata"

# Leggi i file e le cartelle dell'elenco delle directory corrente utilizzando per loop
per me in *
Fare
echo "$ i"
Fatto

Esegui lo script dal terminale.

Esegui lo script.

$ bash trapfunc.sh

Il seguente output lo mostra, “Attività completata"Il testo viene stampato dopo aver stampato tutti i file e le cartelle della directory corrente.

Conclusione

Questo tutorial mostra come il comando 'trap' può essere utilizzato in Linux per eseguire qualsiasi compito automatizzato in base al segnale generato. Aiuta gli utenti a tracciare diversi tipi di errori e a intraprendere un'azione adeguata che può essere assegnata prima utilizzando questo comando. Molti programmi o script assegnano alcune risorse particolari quando si eseguono nel sistema. Se un programma in esecuzione o lo script uscirà o termina in modo anomalo, le risorse utilizzate da quel programma vengono bloccate. Il comando 'trap' può essere utilizzato per risolvere questo problema. L'attività di pulizia delle risorse può essere eseguita facilmente utilizzando questo comando. Spero, il lettore avrà una chiara idea degli usi di questo comando dopo aver letto questo tutorial.