สมมติว่าฉันต้องการรันหลาย ๆ โปรแกรมในแบบคู่ขนานและรวมเอาท์พุทของมันเข้ากับไพพ์เดียว:
sh -c '
(echo qqq; echo qqq2; echo qqq3)&
(echo www; echo www2; echo www3)&
(echo eee; echo eee2; echo eee3)&
wait; wait; wait'
วิธีเชลล์นี้ใช้งานได้ดีสำหรับกรณีง่าย ๆ นี้ แต่ฉันคาดหวังว่ามันจะล้มเหลวหากโปรแกรมส่งออกบรรทัดมากขึ้นและนานขึ้นในลักษณะบัฟเฟอร์เช่นนี้ (สร้างขึ้น):
qqq
qqwww
q2
qqq3www2
wwweee3
eee2
eee3
หนึ่งในวิธีแก้ปัญหาที่ฉันบอกใบ้ให้ใช้คือtail -f
:
tail -n +0 -q -f <(echo qqq; echo qqq2; echo qqq3) <(echo www; echo www2; echo www3) <(echo eee; echo eee2; echo eee3)
แต่นี่เป็นตัวเลือกที่ดีที่สุดย่อย: มันแสดงผลข้อมูลซบเซามันไม่ยุติ ฉันเห็นผลลัพธ์ไม่ได้อยู่ในคำสั่ง "sleep" แต่อยู่ในลำดับอาร์กิวเมนต์ในกรณีนี้:
tail -n +0 -q -f <(sleep 1; echo qqq; sleep 1; echo qqq2; echo qqq3) <(echo www; echo www2; sleep 10; echo www3) <(echo eee; sleep 4; echo eee2; echo eee3) | cat
ฉันได้ใช้โปรแกรมพิเศษขนาดเล็กสำหรับสิ่งนี้ แต่เชื่อว่าควรมีวิธีที่ดีในการทำเช่นนั้น
วิธีการใช้เครื่องมือมาตรฐาน (และไม่tail -f
เสียเปรียบ)?
syslog
...
syslog
ไม่ใช่สำหรับบันทึก แต่สำหรับบางสิ่งบางอย่างจะถือว่าใช้ได้หรือไม่
-s
ตัวเลือกสำหรับหาง เช่นtail -f -s .1 file
จะลดการหน่วงลูปเป็น. 1 วินาทีจากค่าเริ่มต้น 1 วินาที