ปัญหานี้ทำให้ฉันล้มเหลวมานานหลายปี ขอบคุณ jilliagre สำหรับเขยิบในทิศทางที่ถูกต้อง
การตั้งคำถามเล็ก ๆ น้อย ๆ บนกล่อง linux ของฉันสิ่งนี้ก็จบลงอย่างที่คาดไว้:
while true ; do echo "ok"; done | head
แต่ถ้าฉันเพิ่มไปป์มันจะไม่ออกอย่างที่คาดไว้:
while true ; do echo "ok" | cat; done | head
นั่นทำให้ฉันผิดหวังมาหลายปี เมื่อพิจารณาคำตอบที่เขียนโดย jilliagre ฉันคิดวิธีแก้ปัญหาที่ยอดเยี่ยมนี้ขึ้นมา:
while true ; do echo "ok" | cat || exit; done | head
ถาม ...
ก็ไม่มาก นี่คือบางสิ่งที่ซับซ้อนกว่านี้เล็กน้อย:
i=0
while true; do
i=`expr $i + 1`
echo "$i" | grep '0$' || exit
done | head
มันใช้งานไม่ได้ ฉันเพิ่ม|| exit
ดังนั้นมันจึงรู้วิธีที่จะยุติก่อน แต่คนแรกecho
ไม่ตรงกับgrep
ดังนั้นวงออกจากทันที grep
ในกรณีนี้คุณจะไม่ได้รับความสนใจในการออกจากสถานะของ cat
ฉันทำงานรอบคือการเพิ่มอีก ดังนั้นนี่คือสคริปต์ที่ประดิษฐ์ขึ้นที่เรียกว่า "หมื่น":
#!/bin/bash
i=0
while true; do
i=`expr $i + 1`
echo "$i" | grep '0$' | cat || exit
done
tens | head
นี้ต้องสิ้นสุดลงเมื่อใช้เป็น ขอบคุณพระเจ้า.