เมื่อวานนี้ผมอ่านนี้เพื่อแสดงความคิดเห็นที่บอกว่าในเปลือก (อย่างน้อยbash
) "มีผลเช่นเดียวกับ">&-
>/dev/null
ความคิดเห็นนั้นหมายถึงคู่มือ ABSเป็นแหล่งข้อมูล แต่แหล่งที่มาบอกว่า>&-
ไวยากรณ์ "ปิด file descriptors"
ไม่ชัดเจนสำหรับฉันว่าการกระทำสองอย่างของการปิดไฟล์ descriptor และการเปลี่ยนเส้นทางไปยังอุปกรณ์ null นั้นมีความเทียบเท่าโดยสิ้นเชิง ดังนั้นคำถามของฉันคือพวกเขา?
บนพื้นผิวของมันดูเหมือนว่าการปิด descriptor เป็นเหมือนการปิดประตู แต่การเปลี่ยนเส้นทางไปยังอุปกรณ์ null กำลังเปิดประตูสู่บริเวณขอบรก! ทั้งสองดูเหมือนจะไม่เหมือนกันกับฉันเพราะถ้าฉันเห็นประตูที่ปิดฉันจะไม่พยายามโยนอะไรออกไปจากมัน แต่ถ้าฉันเห็นประตูเปิดฉันจะถือว่าฉันทำได้
ในคำอื่น ๆ ฉันสงสัยเสมอว่า>/dev/null
หมายความว่าcat mybigfile >/dev/null
จริง ๆ แล้วจะประมวลผลทุกไบต์ของไฟล์และเขียนมันเพื่อ/dev/null
ที่จะลืมมัน ในทางกลับกันถ้าเชลล์พบ file descriptor ที่ปิดฉันมักจะคิดว่า (แต่ไม่แน่ใจ) ว่ามันจะไม่เขียนอะไรเลยแม้ว่าคำถามcat
นั้นจะยังคงอ่านทุกไบต์
ความคิดเห็นนี้พูด>&-
และ>/dev/null
" ควร " เหมือนกัน แต่มันไม่ได้ดังก้องคำตอบสำหรับฉัน ฉันต้องการคำตอบที่เชื่อถือได้มากขึ้นโดยอ้างอิงถึงแกนมาตรฐานหรือแหล่งข้อมูลบางส่วนหรือไม่ ...