Wenn ich diff -q
zwei Dateien ausführe und sie identisch sind, echo $?
lautet der von generierte Exit-Code 0
; wenn die Dateien unterschiedlich sind, lautet der Exit-Code 1
. Warum ist das so? Inwiefern ist das erste diff
ein Erfolg und das zweite ein Fehlschlag?
Ich habe die Begriffe „Erfolg“ und „Misserfolg“ auf der Grundlage meiner Lektüre und meines begrenzten Verständnisses vonhttp://mywiki.wooledge.org/BashGuide/TestsAndConditionals:
- Beendigungsstatus
Jeder Befehl führt bei Beendigung zu einem Beendigungscode.
Dieser Beendigungscode wird von der Anwendung, die ihn gestartet hat, verwendet, um zu bewerten,
ob alles in Ordnung war. Dieser Beendigungscode ist wie ein Rückgabewert von
Funktionen. Es handelt sich um eine Ganzzahl zwischen 0 und 255 (einschließlich). Die Konvention
schreibt vor, dass wir 0 verwenden, um Erfolg anzuzeigen, und jede andere Zahl, um
einen Fehler irgendeiner Art anzuzeigen.Die genaue Nummer ist völlig anwendungsspezifischund wird verwendet ,
um Hinweise darauf zu geben, was genau schief gelaufen ist.
Ich hätte man diff
bis zum Ende lesen sollen, da dort die von den Entwicklern verwendete Konvention klar ist.
Antwort1
Aus man diff
:
Der Beendigungsstatus ist 0, wenn die Eingaben gleich sind, 1, wenn sie unterschiedlich sind, und 2, wenn ein Problem vorliegt.
Ich gebe offen zu, dass dies vielleicht nichtvöllig serienmäßigaber Exit-Codes sindmehr das, was man "Richtlinien" nennen würde, als tatsächliche Regeln.
In diesem Fall ermöglicht das Abweichen vom Standard eine einfache Ausführung diff
in Skripten.
diff a b && echo "no difference" || echo "differences!"
Dies ist ähnlich zu grep
„0 wird beendet, wenn etwas gefunden wird, und 1, wenn etwas nicht gefunden wird“. Ich kann die Ausrichtung zwischen 0 und 1 für nicht erklären diff
. Ich nehme an, sie haben sich für boolesche Ergebnisse nach C-Standard entschieden.
Das spielt keine Rolle. Es ist nur eine willkürliche Zahl.
Antwort2
man diff
sagt uns
Beendigungsstatus
The following exit values shall be returned:
0 No differences were found.
1 Differences were found.
>1 An error occurred.
Ihre Bezeichnung der Beendigungswerte „Erfolg“ und „Misserfolg“ ist eine selbstlimitierende Wahl. Programme haben ganze 8 Bits für den Beendigungsstatus, Werte von 0 bis 255.