2016-01-22 11 views
6

Prawdopodobnie proste pytanie, ale nie przychodzi na myśl eleganckie rozwiązanie. Chciałbym uruchomić serię komend (każdy z nich jest testem) i zwrócić 1, jeśli którykolwiek z nich zwrócił wartość niezerową. Zazwyczaj chciałbym zrobić coś takiego:Błąd Bash, jeśli jedno polecenie nie powiedzie się, ale nadal wykonuje wszystkie polecenia.

thingA && thingB && thingC 
exit $? 

jednak, że nie będzie działać thingC jeśli thingB zawiedzie i chcę, aby upewnić się, że wszystkie 3 bieg. Mogę łatwo wymyślić nieeleganckie podejście:

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

Czy istnieje jakiś prosty, elegancki sposób na uzyskanie tego, czego chcę?

Odpowiedz

10

Czy to wystarczająco eleganckie?

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

Można użyć $? zamiast 1 jeśli wolisz. Lub możesz zidentyfikować ostatnie polecenie, które nie powiodło się, używając stanów 1, 2, 3 podczas wykonywania zadania. Jeśli chcesz poznać pierwsze polecenie, które się nie udało, musisz przetestować $status przed przypisaniem do niego.

+0

To zadziała, dziękuję. – Pace

Powiązane problemy