Introduzione
Possiamo usare il comando trap
per catturare il sistema di segnali di errore dal sistema durante l'esecuzione dello script. Quindi puoi eseguire un comando della shell o chiamare una funzione. In questo modo, puoi eseguire il tuo codice script personalizzato su un errore che si è verificato in uno script bash.
Questo può essere utile per ripristinare eventuali modifiche parziali, chiudere le connessioni al database o lo stato dell'e-mail alle persone interessate, ecc. È possibile utilizzare il comando trap con segnale ERR come:
trap 'on_error_function' ERR
Quando viene generato un errore in uno script di shell, eseguirà una funzione denominata 'on_error_function
' dello script di shell. Invece di chiamare una funzione, puoi semplicemente eseguire anche un comando.
Esempio: Come eseguire una funzione su Error in Bash
Capiamo con un esempio. Crea uno script di shell di esempio e crea una funzione con qualsiasi nome. Quindi aggiungere il comando trap
con la funzione per il segnale ERR. Quindi, aggiungi un semplice comando che genera un errore:
#!/usr/bin/env bash
on_error(){
echo "Some error occurred"
}
trap 'on_error' ERR
ls ~/dir_not_exists
Esegui lo script sopra e dovresti vedere i risultati di seguito:
ls: cannot access '/home/noviello/dir_not_exists': No such file or directory
Some error occurred
Puoi vedere che l'errore è intercettato e la funzione on_error()
viene eseguita dallo script bash.
Esempio: Come eseguire un comando su Error in Bash
Vediamo un altro esempio. Qui eseguiremo un comando quando si verificherà un errore nello script della shell:
#!/usr/bin/env bash
trap 'echo Ohhh no!' ERR
ls ~/dir_not_exists
Nello script precedente, non definiamo alcuna funzione separata. Basta eseguire un comando echo in caso di errore. Esegui lo script sopra e guarda i risultati:
ls: cannot access '/home/noviello/dir_not_exists': No such file or directory
Ohhh no!
Esempio: Come ottenere il numero di riga dell'errore verificatosi
Puoi anche scoprire il numero di riga, dove si è verificato l'errore nello script bash insieme al nome dello script. Per fare ciò, usa il "caller" integrato in bash:
#!/usr/bin/env bash
on_error(){
echo "Error found in: $(caller)" >&2
}
trap 'on_error' ERR
ls ~/dir_not_exists
Esegui lo script sopra e guarda i risultati. Vedrai il nome dello script e il numero di riga, dove si è verificato l'errore.
ls: cannot access '/home/noviello/dir_not_exists': No such file or directory
Error found in: 9 ./script.sh
Conclusione
Grazie per aver letto questo articolo. Si spera che questo tutorial ti aiuti a scrivere meglio gli script della shell rilevando l'errore e intraprendendo alcune azioni.
Inoltre, ricorda che la trap ERR rileva solo gli errori di runtime. Come se un qualsiasi comando restituisse il codice di stato diverso da zero. Non rileva gli errori di sintassi, perché in caso di errore di sintassi lo script fallisce senza eseguire alcun comando.