2016-04-01 6 views
2

Ich richte ein Skript ein, das eine Reihe von Bündelexec-rspec-Befehlen ausführt, und ich möchte, dass es false zurückgibt, wenn einige von ihnen fehlschlagen. Aber ich möchte immer noch, dass es alle Tests durchführt. Gibt es einen kürzeren Weg, um dies ohne eine Menge von if- oder test-Anweisungen zu erreichen?Mehrere Bash-Befehle ausführen und false zurückgeben, wenn einer von ihnen in bash fehlschlägt

+1

Was haben Sie bisher? Ich kann nur daran denken, in einem Array alle Return-Codes '$?' zu haben und am Ende des Skripts durchzuschleifen, und wenn irgendein Return-Code ungleich 0 ist, setze einen booleschen Wert auf false und brich und verlasse das Skript. – jgr208

Antwort

-1

Verfolgen Sie ihren Beendigungscode in einer Variablen und beenden Sie sie. Ich habe die Zeilennummer zur Fehlerbehebung hinzugefügt, was kaputt gegangen ist.

declare -i r_code=0 # return code 
command1 || { r_code+=$?; echo "ERROR at $LINENO 
} 

command2 || { r_code+=$?; echo "ERROR at $LINENO 
} 

exit $r_code 
+0

@ jgr208 nicht genau richtig - wenn alle Befehle Funktionen sind, die Ihre Fehler protokollieren, haben Sie alle Informationen, die Sie benötigen. Das OP bat darum, mit Misserfolgen aufzuhören, nicht das ganze Skript für ihn zu entwerfen, was ohne weitere Informationen nicht möglich ist. – SaintHax

-1

Dies ist ein for-Schleife, die fehlgeschlagen durch alle Rückgabecodes und wenn man gehen mit dem ersten gesehen fehlgeschlagen Rückkehrcode verlassen wird.

i=0 
rc=0 
command1 
rcode[i]=$? 
i=i+1 
command2 
rcode[i]=$? ... n 
for i in "${rcode}" 
do 
    if [ $i -ne 0 ]; then 
     rc=$i 
     break 
    fi 
done 
exit $rc 
Verwandte Themen