Misalkan saya ingin menjalankan beberapa program secara paralel dan menggabungkan outputnya ke satu pipa:
sh -c '
(echo qqq; echo qqq2; echo qqq3)&
(echo www; echo www2; echo www3)&
(echo eee; echo eee2; echo eee3)&
wait; wait; wait'
Pendekatan shell ini berfungsi dengan baik untuk kasus sederhana ini, tetapi saya berharap akan gagal jika program menghasilkan garis yang lebih banyak dan lebih panjang dengan cara buffered, seperti ini (dibangun):
qqq
qqwww
q2
qqq3www2
wwweee3
eee2
eee3
Salah satu solusi yang saya sarankan untuk digunakan adalah 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)
, tapi ini adalah opsi yang kurang optimal: ini mengeluarkan data dengan lambat, tidak berhenti; Saya melihat output tidak dalam urutan "sleep", tetapi dalam urutan argumen dalam kasus ini:
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
Saya sudah mengimplementasikan program kecil khusus untuk ini, tetapi percaya bahwa harus ada beberapa cara standar yang baik untuk melakukannya.
Bagaimana cara melakukannya menggunakan alat standar (dan tanpa tail -fkerugian)?
syslog...
syslogbukan untuk log, tetapi untuk sesuatu yang menurut kebiasaan dianggap OK?
-sopsi untuk ekor. misalnya tail -f -s .1 fileakan mengurangi penundaan loop menjadi 0,1 detik dari default 1 detik.