นี่เป็นคำตอบเชิงลบ ปรากฏว่าค่าddหรือmbufferหรือแม้แต่pvการทำงานคือทุกกรณีโดยเฉพาะอย่างยิ่งถ้าอัตราข้อมูลที่สร้างขึ้นโดยผู้ผลิตสามารถแตกต่างกันมาก ฉันให้ตัวอย่างด้านล่าง หลังจากพิมพ์คำสั่งแล้วให้รอประมาณ 10 วินาทีจากนั้นพิมพ์>(เพื่อไปยังจุดสิ้นสุดของข้อมูลเช่นรอการสิ้นสุดของอินพุต)
zsh -c 'echo foo0; sleep 3; \
printf "Line %060d\n" {1..123456}; \
echo foo1; sleep 5; \
echo foo2' | dd bs=64K | less
นี่หลังจากพิมพ์>หนึ่งจะต้องรอ 5 วินาทีหมายความว่าผู้ผลิต (สคริปต์ zsh) sleep 5ได้บล็อกก่อน การเพิ่มbsขนาดเป็น 32M ไม่ได้เปลี่ยนพฤติกรรม แต่บัฟเฟอร์ 32MB นั้นใหญ่พอ ฉันสงสัยว่าเป็นเพราะddบล็อกในเอาต์พุตแทนที่จะดำเนินการกับอินพุต การใช้oflag=nonblockไม่ใช่วิธีการแก้ปัญหาเพราะเป็นการทิ้งข้อมูล
zsh -c 'echo foo0; sleep 3; \
printf "Line %060d\n" {1..123456}; \
echo foo1; sleep 5; \
echo foo2' | mbuffer -q | less
ด้วยmbufferปัญหาคือบรรทัดแรก (foo0) ไม่ปรากฏขึ้นทันที ดูเหมือนจะไม่มีตัวเลือกใด ๆ ในการเปิดใช้งานการกำหนดบรรทัดรายการในอินพุต
zsh -c 'echo foo0; sleep 3; \
printf "Line %060d\n" {1..123456}; \
echo foo1; sleep 5; \
echo foo2' | pv -q -B 32m | less
ด้วยลักษณะการทำงานคล้ายกับpv ddแย่กว่านั้นฉันสงสัยว่ามันทำสิ่งผิดพลาดไปยังเครื่องเทอร์มินัลเนื่องจากบางครั้งlessไม่สามารถรับข้อมูลจากเครื่องอีกต่อไป; qตัวอย่างหนึ่งไม่สามารถออกจากมันด้วย