รับตัวอย่างที่น้อยที่สุดนี้
( echo "LINE 1" ; sleep 1 ; echo "LINE 2" ; )
มันจะออกผลลัพธ์LINE 1
และแล้วหลังจากที่สองเอาท์พุทLINE 2
, คาดว่าเป็น
ถ้าเราไปป์นี้ให้ได้ grep LINE
( echo "LINE 1" ; sleep 1 ; echo "LINE 2" ; ) | grep LINE
พฤติกรรมจะเหมือนกับในกรณีก่อนหน้าตามที่คาดไว้
หากอีกวิธีหนึ่งเราจะทำสิ่งนี้เพื่อ cat
( echo "LINE 1" ; sleep 1 ; echo "LINE 2" ; ) | cat
พฤติกรรมจะเหมือนเดิมตามที่คาดไว้
แต่ถ้าท่อเราไปgrep LINE
แล้วไปcat
,
( echo "LINE 1" ; sleep 1 ; echo "LINE 2" ; ) | grep LINE | cat
มีการส่งออกจนกว่าจะมีใครผ่านไปสองไม่มีและทั้งสองเส้นปรากฏในการส่งออกทันทีซึ่งผมไม่ได้คาดหวัง
เหตุใดสิ่งนี้จึงเกิดขึ้นและฉันจะทำให้รุ่นสุดท้ายทำงานในลักษณะเดียวกันกับคำสั่งสามคำแรกได้อย่างไร
cat
เพียงแค่อ่านและเอาท์พุทเข้าไปstdin
stdout
แน่นอนฉันมากับคำถามนี้ด้วยสิ่งที่ซับซ้อนจำนวนมากแทนecho
และcat
แต่สิ่งเหล่านี้กลับกลายเป็นสิ่งที่ไม่เกี่ยวข้องเนื่องจากปัญหาแสดงขึ้นด้วยตัวอย่างที่ง่ายกว่ามาก
cat
ต่อไฟล์เข้าด้วยกัน คุณกำลังพยายามทำอะไรด้วยการส่งไปยังcat
?