Come eseguire un comando o una funzione in caso di errore in Bash Script

1 ott 2022 2 min di lettura
Come eseguire un comando o una funzione in caso di errore in Bash Script
Indice dei contenuti

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.

Support us with a

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.