मान लीजिए कि मैं समानांतर में कई कार्यक्रमों को निष्पादित करना चाहता हूं और उनके आउटपुट को एक पाइप से जोड़ना चाहता हूं:
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)
, लेकिन यह उप-इष्टतम विकल्प है: यह डेटा को सुस्त रूप से आउटपुट करता है, यह समाप्त नहीं होता है; मैं आउटपुट "स्लीप" क्रम में नहीं देखता, लेकिन इस मामले में तर्क क्रम में:
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 सेकंड तक कम कर देगा।