Appendice D. Codici di Exit con significati speciali

Tabella D-1. Codici di Exit riservati

Numero di codice ExitSignificatoEsempioCommenti
1Indica errori genericilet "var1 = 1/0"Errori vari, come "divisione per zero"
2Uso scorretto dei builtin di shell, secondo la documentazione Bash Si vede raramente, sostituito solitamente dal codice di exit 1
126Il comando invocato non può essere eseguito Problemi di permessi o il comando non è un eseguibile
127"command not found" Possibili problemi con $PATH o errore di digitazione
128Argomento di exit non validoexit 3.14159exit richiede come argomento solo un intero compreso nell'intervallo 0 - 255 (vedi nota a piè di pagina)
128+nSegnale di errore fatale "n"kill -9 $PPID dello script$? restituisce 137 (128 + 9)
130Script terminato con Control-C Control-C invia il segnale di errore fatale 2, (130 = 128 + 2, vedi sopra)
255*Exit status fuori intervalloexit -1exit richiede come argomento solo un intero compreso nell'intervallo 0 - 255

Secondo la tabella, i codici di exit 1 - 2, 126 - 165 e 255 [1] hanno significati speciali e, quindi, si dovrebbe evitare di usarli come parametri di exit definiti dall'utente. Terminare uno script con exit 127 sicuramente provoca della confusione nella fase di risoluzione dei problemi (si tratta del codice d'errore di "command not found" oppure è uno definito dall'utente?). Comunque, molti script usano exit 1 come codice di uscita di errore generico. Dal momento che il codice di exit 1 può indicare molti differenti errori, questo potrebbe non essere utile nel debugging.

Vi è stato un tentativo per sistematizzare i numeri degli exit status (vedi /usr/include/sysexits.h), ma questo fu fatto solo per i programmatori di C e C++. Uno standard simile sarebbe stato appropriato anche per lo scripting. L'autore di questo documento propone di limitare i codici di exit definiti dall'utente all'intervallo 64 - 113 (in aggiunta a 0, per indicare successo), per conformarsi allo standard del C/C++. In questo modo, si possono assegnare 50 validi codici rendendo, di fatto, più immediata la soluzione dei problemi degli script.

Tutti i codici di exit definiti dall'utente presenti negli esempi che accompagnano questo documento sono conformi a questo standard, tranne nei casi in cui vi siano state delle circostanze tali da non permettere l'applicazione di questa regola, come in Esempio 9-2.

Nota

Eseguendo, al termine di uno script, $? da riga di comando, si otterranno risultati coerenti con la precedente tabella solo al prompt di Bash o sh. L'esecuzione di C-shell o tcsh potrebbe, in alcuni casi, fornire valori diversi.

Note

[1]

Valori di exit al di fuori dell'intervallo possono dar luogo a numeri di exit imprevedibili. Un valore di exit maggiore di 255 restituisce un codice di exit in modulo 256. Per esempio, exit 3809 dà come codice di exit 225 (3809 % 256 = 225).