ข้อความการใช้งานควรไปที่ stderr หรือ stdout หรือไม่


29

ควรข้อความการใช้งานที่พิมพ์ด้วยเช่น

 command -?

ของคำสั่ง Unix ไปที่ stderr หรือ stdout และทำไม? มันควรจะไปที่เดียวกันถ้าผู้ใช้ทำผิดพลาดกับตัวเลือก?


4
หมายเหตุเพิ่มเติม: ไม่ใช้ -? ใช้ - ช่วยและ -h เพราะ - ช่วยและ -h เป็นมาตรฐานและเพราะ - จะสามารถตีความได้โดยเชลล์
ctrl-alt-delor

1
@richard นี่เป็นจุดที่ยอดเยี่ยม เคล็ดลับความสนุกสนาน (ในทุบตี): touch -- -l; ls -?- คุณจะได้รับจริงยาวรายการเช่นถ้าคุณต้องการผ่านการ-lสั่ง ls
mattdm

@ Richard เมื่อคุณไม่ทราบว่าคำสั่งยอมรับตัวเลือกแบบยาวของ GNU หรืออาจสนับสนุน-hตัวเลือกสำหรับสิ่งอื่นนอกเหนือจากข้อความช่วยเหลือ'-?'(ด้วยเครื่องหมายคำพูด) หรือ-:ให้โอกาสที่ดีในการรับข้อความแสดงข้อผิดพลาด (และการใช้) :และไม่สามารถเป็นตัวเลือกที่ถูกต้องสำหรับสิ่งที่ใช้? getopt(3)
Stéphane Chazelas

@ Stephane Chazelas หากฉันเข้าใจความคิดเห็นของคุณอย่างถูกต้องคุณกำลังเขียนจากมุมมองของผู้ใช้โปรแกรมคำถามนี้ฉันคิดว่ามาจากมุมมองของคนที่เขียนโปรแกรม
ctrl-alt-delor

คำตอบ:


50

ควรไปที่ stdout เพื่อให้คุณสามารถพิมพ์:

command --help | less

นี้ยังเป็นที่แนะนำโดยGnu --helpมาตรฐานการเข้ารหัสบน

ในทางกลับกันข้อความการใช้งานที่คุณได้รับเมื่อคุณใช้ตัวเลือกที่ไม่ถูกต้องหรือละเว้นอาร์กิวเมนต์ที่ต้องการควรไปที่ stderr เนื่องจากเป็นข้อความแสดงข้อผิดพลาดและคุณไม่ต้องการให้ฟีดเข้าไปในคำสั่งถัดไปในไพพ์ไลน์

เมื่อคุณใช้--helpข้อความการใช้งานเป็นเอาต์พุตปกติและผลลัพธ์ที่คาดหวังของคำสั่ง ดังนั้นมันจะไป stdout เพื่อที่จะสามารถได้รับการประปาคำสั่งอื่นเช่นหรือlessgrep

เมื่อคุณพูดว่าcommand --bogus-option | other-commandคุณไม่ต้องการให้ข้อความการใช้งานไป stdout other-commandเพราะการส่งออกในขณะนี้ไม่คาดคิดว่าไม่ควรจะดำเนินการโดย นอกจากนี้หากเอาต์พุตของ--helpมีมากกว่าหนึ่งบรรทัดข้อความแสดงข้อผิดพลาดในการใช้ควรมีเพียงบทสรุปของ--helpผลลัพธ์และอ้างอิงผู้ใช้ถึง--helpรายละเอียดเพิ่มเติม


1
มันสับสนเล็กน้อยที่จะมีเอาต์พุตสตรีมสองแบบที่แตกต่างกันสำหรับข้อความเดียวกัน

7
บางที แต่พวกเขาไม่จำเป็นต้องเป็นข้อความเดียวกัน หากเอาต์พุตของ--helpมีมากกว่าสองสามบรรทัดข้อความการใช้งานที่สร้างโดยตัวเลือกที่ไม่ถูกต้องควรเป็นเพียงข้อมูลสรุปสั้น ๆ ที่บอกให้ใช้--helpเพื่อดูข้อมูลที่สมบูรณ์
cjm

4
+1 - นี่ถูกต้อง 100% และฉันไม่เห็นห้องใด ๆ ที่ไม่เห็นด้วยที่นี่
simon
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.