Sollte die Verwendungsmeldung an stderr oder stdout gehen?


29

Sollte die Benutzungsmeldung, die mit z

 command -?

eines Unix-Befehls gehen Sie zu stderr oder stdout und warum? Sollte es an die gleiche Stelle gehen, wenn der Benutzer einen Fehler mit einer Option macht?


4
Zusätzlicher Hinweis: Verwenden Sie nicht -? benutze --help und -h Weil --help und -h Standard sind und weil -? will kann von der Shell interpretiert werden.
Strg-Alt-Delor

1
@richard Das ist ein ausgezeichneter Punkt. Unterhaltsamer Trick (in Bash): touch -- -l; ls -?- Sie erhalten tatsächlich eine lange Liste, als ob Sie -lan ls übergeben hätten.
Mattdm

@richard. Wenn Sie nicht wissen, ob der Befehl lange Optionen im GNU-Stil akzeptiert oder eine -hOption für eine andere Sache als eine Hilfemeldung unterstützt, können Sie '-?'(mit Anführungszeichen) oder -:eine gute Chance haben, seitdem eine Fehlermeldung (und eine Verwendungsmeldung) zu erhalten :und ?kann keine gültigen Optionen für irgendetwas verwenden getopt(3).
Stéphane Chazelas

@Stephane Chazelas. Wenn ich Ihren Kommentar richtig verstehe, schreiben Sie aus der Perspektive eines Programmbenutzers. Diese Frage ist meiner Meinung nach aus der Perspektive eines Programmschreibers.
Strg-Alt-Delor

Antworten:


50

Es sollte auf stdout gehen, damit Sie Folgendes eingeben können:

command --help | less

Dies wird auch von der. Empfohlen Gnu Coding Standards--help .

Andererseits sollte die Verwendungsmeldung, die Sie erhalten, wenn Sie eine ungültige Option verwenden oder ein erforderliches Argument weglassen, an stderr gesendet werden, da es sich um eine Fehlermeldung handelt, die nicht in den nächsten Befehl in einer Pipeline eingehen soll.

Bei Verwendung --helpist die Verwendungsmeldung die normale und erwartete Ausgabe des Befehls. Daher geht es zu stdout, so dass es zu einem anderen Befehl wie geleitet werden kannless oder weitergeleitet werden kann grep.

Wenn Sie sagen command --bogus-option | other-command, dass Sie nicht möchten, dass die Verwendungsmeldung stdout wird, da es sich nun um eine unerwartete Ausgabe handelt, die nicht von verarbeitet werden sollte other-command. Wenn die Ausgabe von --helpmehr als eine Handvoll Zeilen umfasst, sollte die Verwendungsfehlermeldung nur eine Zusammenfassung der --helpAusgabe enthalten und den Benutzer --helpfür weitere Details auf verweisen .


1
Es ist etwas verwirrend, zwei verschiedene Ausgabestreams für dieselbe Nachricht zu haben, abhängig von etwas, nicht wahr?

7
Vielleicht, aber sie sind nicht unbedingt die gleiche Botschaft. Wenn die Ausgabe von --helpmehr als ein paar Zeilen umfasst, sollte die von einer ungültigen Option erzeugte Verwendungsmeldung nur eine kurze Zusammenfassung sein, mit --helpder die vollständigen Informationen angezeigt werden.
cjm

4
+1 - das ist zu 100% richtig und ich sehe hier keinen Raum für Meinungsverschiedenheiten.
Simon
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.