Cos'è un codice di uscita
Ogni script, comando o binario esce con un codice di ritorno. Puoi vedere questo valore nella variabile speciale $? . I codici di ritorno sono numerici e sono limitati a essere compresi tra 0 e 255 perché viene utilizzato un intero a 8 bit senza segno. Se si utilizza un valore di -1, restituirà 255. Ogni esecuzione termina con un codice di uscita, riuscito o meno, con un messaggio di errore o silenziosamente. Ad esempio:
$ date ; echo $? Sat Jan 18 08:06:07 IST 2020 0
Come puoi vedere, il codice di uscita è 0 perché il comando è stato eseguito senza problemi. Ora, proviamo questo:
$ wrngcmd ; echo $? -bash: wrngcmd: command not found 127
È un comando non trovato poiché abbiamo appena digitato un gruppo di caratteri insignificanti.
Codici di uscita Bash riservati
Così simile al codice di uscita "0" che denota il successo del comando, bash ha alcuni codici di uscita riservati per diverse situazioni. Quindi, idealmente, se stai utilizzando il comando di uscita in uno script e devi specificare un codice di uscita, non utilizzare questi codici di uscita riservati poiché potrebbero creare risultati contrastanti.
Numero codice uscita | Significato | Esempio | Commenti |
---|---|---|---|
1 | Catchall per errori generali | lascia che “var1 =1/0” | Errori vari, come "dividere per zero" e altre operazioni non consentite |
2 | Uso improprio degli interni della shell | funzione_vuota() {} | Parola chiave o comando mancante |
126 | Il comando invocato non può essere eseguito | /dev/null | Il problema o il comando di autorizzazione non è un eseguibile |
127 | "comando non trovato" | comando_illegale | Possibile problema con $PATH o un errore di battitura |
128 | Argomento non valido per uscire | uscita 3.14159 | exit richiede solo argomenti interi nell'intervallo 0 – 255 (vedi prima nota a piè di pagina) |
128 +n | Segnale di errore irreversibile “n” | uccidi -9 $PPID di script | $? restituisce 137 (128 + 9) |
130 | Script terminato da Control-C | Ctrl-C | Control-C è il segnale di errore fatale 2, (130 =128 + 2, vedi sopra) |
255* | Stato di uscita fuori intervallo | uscita -1 | exit richiede solo argomenti interi nell'intervallo 0 – 255 |
Comprendiamo il codice di uscita “128 +n” con un esempio. Esegui il ciclo infinito come mostrato di seguito:
#!/bin/bash while true; do echo ${$} done
Se esegui questo script, stamperà lo stesso PID indefinitamente fino a quando non lo ucciderai o eseguirai "CTRL+C". Proviamo a fare un "CTRL+C" e vediamo qual è il codice di uscita.
# sh test.sh .... 2582 2582 2582 2582 2582 2582 ^C geeklab$ echo $? 130
Come puoi vedere il codice di uscita è "128+2" cioè 130. Allo stesso modo se uccidiamo lo script usando "kill -9" il codice di uscita dovrebbe essere "128+9" cioè 137. Vediamo anche un esempio di questo:
# sh test.sh .... 2582 2582 2582 ...
# kill -9 [pid_of_script]
.... 2602 2602 Killed: 9 geeklab$ echo $? 137