2012-03-01 21 views
24

Come posso controllare il codice di uscita di una sostituzione di comando in bash se l'assegnazione è a una variabile locale in una funzione?
Vedere i seguenti esempi. Il secondo è dove voglio controllare il codice di uscita.
Qualcuno ha una buona soluzione o soluzione corretta per questo?codice di uscita della sostituzione di comando in bash assegnazione locale variabile

$ function testing { test="$(return 1)"; echo $?; }; testing 
1 
$ function testing { local test="$(return 1)"; echo $?; }; testing 
0 

risposta

31

Se si guarda alla pagina di man di local (che è in realtà solo la pagina man builtins BASH), viene trattato come un proprio comando, che dà un codice di uscita di 0 sulla creazione di successo la variabile locale. Quindi local sta sovrascrivendo il codice di errore eseguito per ultimo.

Prova questo:

function testing { local test; test="$(return 1)"; echo $?; }; testing 

EDIT: sono andato avanti e ho provato per voi, e funziona.

+0

Grazie, come sempre, subito dopo aver postato la mia domanda ho trovato la risposta me stessa che viene fuori come lo stesso suggerisci. Ho appena meno di una reputazione per rispondere alle mie domande prima che siano passate 8 ore. Ma 'man local' mi dà la pagina man della manpage' LOCAL (8postfix) ', quindi non troppo utile. Ma l'ho trovato su http://mywiki.wooledge.org/BashPitfalls#local_varname.3D.24.28command.29 – Vampire

+0

Un'altra fonte di informazioni sarebbe 'man bash'. 'local' è menzionato sotto la sezione" COMANDI INCORPORATI ALLA COSTRUZIONE ". –

+0

Il comando 'help' restituisce la documentazione sui comandi incorporati. Vedi 'help local'. – Eliot

Problemi correlati