2010-02-22 14 views
5

Ho uno script di bash in cui controllo il codice di uscita di un ultimo comando di esecuzione usando $? variabile ma ora sto eseguendo un programma C (da quello script) che restituisce 0 se il programma viene eseguito correttamente. C'è un modo in cui posso cogliere questo valore di ritorno del programma C nel mio script bash?Controllare il valore di ritorno di un programma C in uno script bash?

Credo che comandi diversi come awk, sed ecc. Siano scritti in C. Come usano $? per memorizzare i loro codici di uscita in esso? Come posso fare in modo che il mio programma C memorizzi il suo codice di uscita in $ ??

Spero che la mia domanda sia chiara.

risposta

11

Non è necessario fare nulla: se il programma C restituisce 0, questo è ciò che verrà memorizzato nella variabile $? della shell che l'ha eseguita.

+0

Lo stato di uscita è limitato a solo 8 bit, quindi solo gli 8 bit più bassi di ciò che restituisce il programma verranno archiviati in $? –

+0

@Chris Dodd - POSIX limita comunque il valore di ritorno da 0 a 255, quindi l'archiviazione a 8 bit non è un problema, è un'ottimizzazione. –

1

bash acquisisce il codice di uscita in $? automaticamente. Oppure puoi semplicemente usare il comando in if se ti interessa solo zero/non-zero.

1

Il codice di ritorno di un programma C è il valore restituito dalla funzione int main() o l'argomento della funzione exit(). Il sistema lo rende quindi disponibile per il processo principale tramite la chiamata di sistema wait(). Quando il processo principale è bash, questo valore viene quindi reso disponibile tramite la variabile $?.

+0

Cosa ti fa pensare che sia coinvolto errno? –

+0

Suppongo che venga creato un nuovo processo con 'fork()' e la sua pagina man lo menziona. Ho sbagliato? – mouviciel

+0

Bene, Windows (su cui uso bash) non ha fork(). E in oltre 25 anni di programmazione UNIX, non ho mai visto alcun suggerimento che errno sia associato al valore di uscita di un processo. Non sto dicendo che hai torto, ma mi servirebbe capitolo e versetto prima di dire che hai ragione. –

Problemi correlati