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
Antwort
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
@ 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
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
- 1. Mehrere Befehle parallel ausführen und immer dann zurückkehren, wenn einer von ihnen fehlschlägt oder alle erfolgreich sind
- 2. Parserfehler von Vorlagen zurückgeben, wenn Map-Suche fehlschlägt
- 3. Kann ich MySQL erfolgreich ausführen, wenn eine Unterabfrage fehlschlägt und fehlschlägt, wenn die Unterabfrage erfolgreich ist?
- 4. Wird isset() false zurückgeben, wenn ich einer Variablen NULL zuweise?
- 5. Was ist, wenn call_user_func false zurückgeben soll?
- 6. Befehle von Shell-Skript ausführen fehlschlägt
- 7. false zurückgeben nicht manchmal
- 8. Bash schlägt fehl, wenn ein einzelner Befehl fehlschlägt, aber alle Befehle ausgeführt werden
- 9. TreeSet gibt false zurück, wenn es true zurückgeben soll?
- 10. Befehl nach einer bestimmten Zeit stoppen und das Ergebnis in Bash zurückgeben
- 11. Mehrere Typen zurückgeben
- 12. Bash-Skript in einer PDF-Datei ausführen
- 13. Warnung generieren, wenn mehrere ausführbare Dateien in Pfad, wenn in bash Befehl ausführen
- 14. Wird hasOwnProperty jemals false aus einer for ... in-Schleife zurückgeben?
- 15. Bash: Zurückgeben einer Zeichenfolge aus der Bash-Funktion
- 16. Warum könnte AccountManager.addAccountExplicitely false zurückgeben?
- 17. Warum checkbox false value zurückgeben?
- 18. IsAssignableFrom() gibt false zurück, wenn es true zurückgeben soll
- 19. Bash wenn/else existieren Status beim Ausführen von Befehlen
- 20. Bash wenn sonst und Variablenzuweisung
- 21. Was, wenn überhaupt, Injektionsschwachstellen gibt es in bash und wie kann ich vor ihnen schützen?
- 22. Bash: Wenn Befehl Timeout, etwas anderes ausführen
- 23. Bash-Skript in Gradle ausführen
- 24. Mehrere ungefähre Übereinstimmungen zu einer ComboBox zurückgeben
- 25. HttpRequest.Content.IsMimeMultipartContent() gibt false zurück, wenn es true zurückgeben soll
- 26. Terminalfenster öffnen und benutzerdefinierte Befehle in ihnen ausführen?
- 27. Öffnen von externen .pptx und .xlsx einmal und Ausführen mehrerer Unterprogramme auf ihnen
- 28. Unterschied zwischen Selbst und diese in JavaScript und wenn einer von ihnen verwenden
- 29. Ausführen einer R-Funktion über Dateien in einer Bash-Befehlszeile
- 30. Wenn ThreadPool.QueueUserWorkItem false zurück
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