Exitcode von diff

Exitcode von diff

Wenn ich diff -qzwei 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 diffein 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:

  1. 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 diffbis 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.

Bildbeschreibung hier eingeben

In diesem Fall ermöglicht das Abweichen vom Standard eine einfache Ausführung diffin 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 diffsagt 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.

verwandte Informationen