2016-01-22 5 views
6

Probabilmente una domanda semplice ma una soluzione elegante non viene in mente. Vorrei eseguire una serie di comandi (ognuno di essi è un test) e restituire 1 se uno di essi è stato restituito diverso da zero. In genere vorrei fare qualcosa di simile:Bash fallire se un singolo comando fallisce ma eseguire comunque tutti i comandi

thingA && thingB && thingC 
exit $? 

Tuttavia, ciò non verrà eseguito thingC se thingB fallisce e voglio assicurare che tutti e 3 run. Posso facilmente pensare a un approccio poco elegante:

final_result=0 
retval=thingA 
if [[ $retval != 0 ]] then 
    final_result=1 
fi 
retval=thingB 
... 
exit $final_result 

C'è un modo semplice ed elegante per ottenere ciò che voglio?

risposta

10

È abbastanza elegante?

status=0 
thingA || status=1 
thingB || status=1 
thingC || status=1 
exit $status 

È possibile utilizzare $? invece di 1, se si preferisce. Oppure potresti identificare l'ultimo comando che ha fallito usando gli stati 1, 2, 3 quando esegui il compito. Se si desidera conoscere il primo comando non riuscito, è necessario testare $status prima di assegnarlo.

+0

Che funzionerà, grazie. – Pace