In erster Näherung ist 0 Erfolg, Nicht-Null ist Fehler, wobei 1 allgemeiner Fehler ist und alles, was größer als eins ist, ein spezifischer Fehler ist. Abgesehen von den trivialen Ausnahmen von false und test, die beide 1 für den Erfolg ergeben sollen, habe ich noch einige andere Ausnahmen gefunden.
Realistischer bedeutet 0 Erfolg oder vielleicht Misserfolg, 1 bedeutet allgemeiner Misserfolg oder vielleicht Erfolg, 2 bedeutet allgemeiner Misserfolg, wenn 1 und 0 beide für Erfolg verwendet werden, aber vielleicht auch Erfolg.
Der Befehl diff gibt 0 an, wenn die verglichenen Dateien identisch sind, 1, wenn sie sich unterscheiden, und 2, wenn sich die Binärdateien unterscheiden. 2 bedeutet auch Fehler. Der Befehl less gibt 1 für Fehler an, es sei denn, Sie geben kein Argument an. In diesem Fall wird 0 trotz Fehler beendet.
Der Befehl more und der Befehl buchstabieren geben 1 für Fehler an, es sei denn, der Fehler ist auf eine verweigerte Berechtigung, eine nicht vorhandene Datei oder den Versuch zurückzuführen, ein Verzeichnis zu lesen. In jedem dieser Fälle beenden sie 0, obwohl sie fehlschlagen.
Dann gibt der Befehl expr 1 für sucess aus, es sei denn, die Ausgabe ist die leere Zeichenfolge oder Null. In diesem Fall ist 0 sucess. 2 und 3 sind Fehler.
Dann gibt es Fälle, in denen Erfolg oder Misserfolg nicht eindeutig sind. Wenn grep kein Muster findet, wird 1 beendet, 2 jedoch für einen echten Fehler (wie die verweigerte Berechtigung). Klist beendet 1 auch, wenn es kein Ticket findet, obwohl dies nicht wirklich ein Fehler ist, als wenn grep kein Muster findet oder wenn Sie ein leeres Verzeichnis haben.
Leider scheinen die vorhandenen Unix-Kräfte keine logischen Regeln durchzusetzen, selbst bei sehr häufig verwendeten ausführbaren Dateien.