Guida avanzata di scripting Bash: Un'approfondita esplorazione dell'arte dello scripting di shell | ||
---|---|---|
Indietro | Avanti |
Tabella D-1. Codici di Exit riservati
Numero di codice Exit | Significato | Esempio | Commenti |
---|---|---|---|
1 | Indica errori generici | let "var1 = 1/0" | Errori vari, come "divisione per zero" |
2 | Uso scorretto dei builtin di shell, secondo la documentazione Bash | Si vede raramente, sostituito solitamente dal codice di exit 1 | |
126 | Il 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 | |
128 | Argomento di exit non valido | exit 3.14159 | exit richiede come argomento solo un intero compreso nell'intervallo 0 - 255 (vedi nota a piè di pagina) |
128+n | Segnale di errore fatale "n" | kill -9 $PPID dello script | $? restituisce 137 (128 + 9) |
130 | Script terminato con Control-C | Control-C invia il segnale di errore fatale 2, (130 = 128 + 2, vedi sopra) | |
255* | Exit status fuori intervallo | exit -1 | exit 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.
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. |
[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). |