มี POSIX, GNU อย่างเป็นทางการหรือแนวทางอื่น ๆ หรือไม่ว่ารายงานความคืบหน้าและข้อมูลการบันทึก (สิ่งต่าง ๆ เช่น "Doing foo; foo done") ควรพิมพ์ออกมาหรือไม่? โดยส่วนตัวแล้วฉันมักจะเขียนถึง stderr เพื่อที่ฉันจะสามารถเปลี่ยนเส้นทาง stdout และรับเอาท์พุทจริงของโปรแกรมเท่านั้น ฉันเพิ่งบอกว่านี่ไม่ใช่วิธีปฏิบัติที่ดีเนื่องจากรายงานความคืบหน้าไม่ใช่ข้อผิดพลาดจริง ๆ และควรพิมพ์เฉพาะข้อความข้อผิดพลาดไปยัง stderr
ทั้งสองตำแหน่งมีเหตุผลและแน่นอนว่าคุณสามารถเลือกอย่างใดอย่างหนึ่งขึ้นอยู่กับรายละเอียดของสิ่งที่คุณกำลังทำอยู่ แต่ฉันอยากจะรู้ว่ามีมาตรฐานที่ยอมรับกันโดยทั่วไปสำหรับเรื่องนี้หรือไม่ ฉันไม่สามารถค้นหากฎเฉพาะใน POSIX มาตรฐานการเข้ารหัสของ GNU หรือรายการแนวทางปฏิบัติที่ดีที่สุดอื่น ๆ
เรามีคำถามที่คล้ายกันสองสามข้อ แต่พวกเขาไม่ได้แก้ไขปัญหาที่แน่นอนนี้:
เมื่อใดที่จะใช้การเปลี่ยนเส้นทางไปยัง stderr ในเชลล์สคริปต์ : คำตอบที่ได้รับการยอมรับแสดงให้เห็นสิ่งที่ฉันมักจะทำเอาท์พุทสุดท้ายของโปรแกรมไว้ที่ stdout และทุกอย่างจะเป็น stderr อย่างไรก็ตามนี่เป็นเพียงความเห็นของผู้ใช้แม้ว่าจะได้รับการสนับสนุนจากการขัดแย้ง
ข้อความการใช้งานควรไปที่ stderr หรือ stdout หรือไม่ : นี่เป็นข้อความเฉพาะสำหรับช่วยเหลือข้อความ แต่อ้างอิงมาตรฐานการเข้ารหัสของ GNU นี่คือสิ่งที่ฉันกำลังมองหาไม่ จำกัด เฉพาะเพื่อช่วยส่งข้อความเท่านั้น
ดังนั้นมีกฎอย่างเป็นทางการว่ารายงานความคืบหน้าและข้อความที่ให้ข้อมูลอื่น ๆ (ซึ่งไม่ได้เป็นส่วนหนึ่งของผลลัพธ์ที่แท้จริงของโปรแกรม) ควรจะพิมพ์หรือไม่
stdout
จริงๆแล้วเป็นวิธีที่ปลอดภัยและถูกต้องในการ pringting เหยื่อและข้อความที่ให้ข้อมูลอื่น ๆ แต่ในขณะที่โปรแกรมเมอร์หลายคนบอกว่า ไม่ทำอะไรเลยถ้าทุกอย่างเรียบร้อยดี ' ดังนั้นในความเป็นจริง stderr มักจะใช้ในการทำเช่นนั้นเพราะความหมายที่คลุมเครือและ stdout อาจทำลายลำดับท่อ สำหรับคำแนะนำอย่างเป็นทางการ
stderr
เพื่อรายงานข้อผิดพลาดยกเว้นเมื่อใช้--verbose
แฟล็กซึ่งรายงานความคืบหน้าของจุดจะถูกรวมไว้ด้วย
stdout
ร่วมกันกับผลลัพธ์เป็นวิธีที่ปลอดภัยในการทำให้ผลลัพธ์นั้นไร้ประโยชน์ หากคุณต้องการนำผลลัพธ์ไปใช้กับโปรแกรมอื่นโปรแกรมดังกล่าวจะต้องแยกผลลัพธ์ออกจากสปินเนอร์ นอกจากนี้หากคุณเปลี่ยนเส้นทางผลลัพธ์ไปยังไฟล์คุณจะไม่สามารถเห็นสปินเนอร์ได้ IMHO