GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Warum stoppt bash bei Fehlern in der Folge von kurzgeschlossenen Befehlen nicht?

Die Logik hier ist, dass Ihre Verwendung von && ist bereits Fehlerüberprüfung. Genauso behandelt Bash einen Fehler innerhalb eines if nicht Bedingung als abbruchwürdig, auch mit set -e .

Wenn Sie die Befehle in Klammern einschließen, führen Sie diese Befehle tatsächlich innerhalb einer Subshell aus, sodass das Skript selbst nur die Rückgabe dieser Subshell sieht, dh:es ist sich nicht bewusst, dass && überhaupt beteiligt ist, also bricht es wie erwartet ab.


Zitieren Sie das Referenzhandbuch:

Die Shell wird nicht beendet, wenn der fehlgeschlagene Befehl Teil der Befehlsliste ist, die unmittelbar auf das Schlüsselwort while oder until folgt, Teil des Tests in einer if-Anweisung, Teil eines beliebigen Befehls, der in einem &&oder || ausgeführt wird außer dem Befehl nach dem abschließenden &&oder ||, jedem Befehl in einer Pipeline außer dem letzten oder wenn der Rückgabestatus des Befehls mit !

invertiert wird
Linux
  1. Warum speichert Bash keine Befehle, die mit Leerzeichen beginnen?

  2. Warum enthält die Bash-Übersetzungsdatei nicht alle Fehlertexte?

  3. Warum funktioniert `exit &` nicht?

  4. Warum funktioniert find -exec mv {} ./target/ + nicht?

  5. bash sh - Befehl nicht gefunden

Fehlerbehebung „Bash:Command Not Found“-Fehler in Linux

Befehl yum-config-manager nicht gefunden [Fix]

c_rehash :Fehler „Befehl nicht gefunden“ – Lösung

Warum funktioniert die Bash-Prozesssubstitution bei einigen Befehlen nicht?

If…else…if-Anweisung (Fehler „Befehl nicht gefunden“)?

Bash:Warum wird das übergeordnete Skript nicht bei SIGINT beendet, wenn das untergeordnete Skript SIGINT abfängt?