Birden fazla programı paralel olarak yürütmek ve çıktılarını bir boruya birleştirmek istediğimi varsayalım:
sh -c '
(echo qqq; echo qqq2; echo qqq3)&
(echo www; echo www2; echo www3)&
(echo eee; echo eee2; echo eee3)&
wait; wait; wait'
Bu kabuk yaklaşımı bu basit durum için iyi çalışıyor, ancak programlar bu şekilde (inşa edilmiş) arabelleğe alınmış şekilde daha uzun satırlar çıkarırsa başarısız olmasını beklerim:
qqq
qqwww
q2
qqq3www2
wwweee3
eee2
eee3
Kullanmak istediğim çözümlerden biri 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)
, ancak bu en iyi seçenek değildir: verileri yavaş bir şekilde çıkarır, sonlandırılmaz; Çıktıları "uyku" düzeninde değil, bu durumda argüman düzeninde görüyorum:
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
Bunun için özel bir küçük program uyguladım , ancak bunu yapmanın standart iyi bir yolu olması gerektiğine inanıyorum.
Standart araçlar kullanarak (ve tail -fdezavantajsız) nasıl yapılır?
syslog...
syslogGünlükler için değil, özel olarak kabul edilen bir şey için kullanmak tamam mı?
-skuyruk seçeneğinden bahsetmeye değer olacağını düşündüm . Örneğin tail -f -s .1 file, döngü gecikmesini varsayılan 1 saniyeden 0,1 saniyeye düşürecektir.