Gibt es einen Standardbefehl, der immer mit einem Fehler beendet wird?

42

Ich möchte mein Skript mit einem Befehl testen, der fehlschlägt. Ich könnte einen vorhandenen Befehl mit schlechten Argumenten verwenden. Ich könnte auch ein einfaches Skript schreiben, das bei einem Fehler sofort beendet wird. Beide sind einfach zu erledigen und funktionieren für mich. Wenn es jedoch einen Standardbefehl für diesen Zweck gibt, würde ich diesen gerne verwenden.

Matthew
quelle
false, aber auch nicht existierende Befehle.
Kusalananda

Antworten:

51

Sie können verwendet werden false( /bin/false, /usr/bin/false, oder Shell - builtin):

$ false || echo It failed.
It failed.
$

Sie können auch exit 1aus einer Unterschale verwenden:

$ (exit 1) || echo Gosh, it failed too.
Gosh, it failed too.
$
mrb
quelle
Sie können exit auch mit einer beliebigen Nummer im Bereich von 1 bis 255 (einschließlich) anrufen. (Die meisten Shells wenden eine Modulo 255-Operation auf alle anderen Zahlen an, die zum Beenden angegeben werden. In der Praxis können Sie also mit anderen Zahlen davonkommen, obwohl sie nur in den oben genannten Bereich gezwungen werden. Einige Shells führen jedoch andere Aktionen aus, z. B. Beenden mit Ein Syntaxfehler (aber immer noch ein Fehlerstatus), wenn er mit einem negativen Wert aufgerufen wird Unix-ähnliche Systeme unterstützen nur Exit-Codes im Bereich von 0 bis 255. Aus diesem Grund können Sie sich bei anderen angegebenen Werten nicht auf ein genau definiertes Verhalten verlassen in allen Schalen zu verlassen.)
mtraceur
1
Und als kleine Kleinigkeit können Sie dies auch tun ! :(oder jeden anderen Befehl, der normalerweise zum Erfolg führt) , es sei denn, Sie benötigen Portabilität für wirklich alte / undurchsichtige Shells . !sagt, dass der Beendigungsstatus des folgenden Befehls negiert werden soll. :ist nur der Befehl noop builtin, der immer mit Erfolg beendet wird. (Stellen Sie einfach sicher, dass nach !und vor dem zu negierenden Befehl ein Leerzeichen eingefügt wird. Andernfalls wird versucht, ihn als einen Befehl zu analysieren, der mit einem !Zeichen beginnt. Bei Shells wie bashim interaktiven Modus wird er als einer der folgenden analysiert diese speziellen Geschichtsmodifikatoren.)
mtraceur