Ja, zeigen Sie eine Meldung an, stderr
wenn die falschen Argumente verwendet werden. Wenn dies auch dazu führt, dass die Anwendung beendet wird, beenden Sie sie mit einem Exit-Status ungleich Null.
Sie sollten den Standardfehlerstrom für Diagnosemeldungen oder für die Benutzerinteraktion verwenden. Zu den Diagnosemeldungen gehören Fehlermeldungen, Warnungen und andere Meldungen, die nicht Teil der Ausgabe des Dienstprogramms sind, wenn es ordnungsgemäß funktioniert ("korrekt" bedeutet, dass nichts Außergewöhnliches passiert, z. B. nicht gefundene Dateien oder was auch immer).
Viele Shells (alle?) Zeigen Eingabeaufforderungen, die Benutzertypen, Menüs usw. an, stderr
damit die Umleitung Sie stdout
nicht daran hindert, auf sinnvolle Weise mit der Shell zu interagieren.
Folgendes stammt aus einem Blogbeitrag zu diesem Thema:
Dies ist ein Zitat von Doug McIllroy, Erfinder der Unix-Pipes, der erklärt, wie es dazu stderr
kam. 'v6' bezieht sich auf eine Version einer bestimmten Version des ursprünglichen Unix-Betriebssystems, das 1975 veröffentlicht wurde.
Alle Programme stellten die Diagnose auf die Standardausgabe. Dies hatte immer zu Problemen geführt, wenn die Ausgabe in eine Datei umgeleitet wurde, wurde jedoch unerträglich, wenn die Ausgabe an einen ahnungslosen Prozess gesendet wurde. Da die Leute jedoch nicht bereit waren, die Einfachheit des Standard-Input-Standard-Output-Modells zu verletzen, tolerierten sie diesen Zustand durch Version 6. Kurz danach schnitt Dennis Ritchie den gordischen Knoten, indem er die Standardfehlerdatei einführte. Das war nicht genug. Bei Pipelines kann die Diagnose von mehreren Programmen gleichzeitig erfolgen. Diagnose erforderlich, um sich zu identifizieren.
- Doug McIllroy, "Ein Research UNIX Reader: Kommentierte Auszüge aus dem Programmierhandbuch, 1971-1986"
Sich zu identifizieren bedeutet einfach zu sagen "Hey! Ich rede! Das ging schief: [...]":
$ ls nothere
ls: nothere: No such file or directory
Dies zu tun stderr
ist vorzuziehen, da es sonst von dem gelesen werden könnte, was gerade gelesen wurde stdout
(aber wir machen das ls
sowieso nicht , oder?).