अगर मैं सही तरीके से समझूं, तो आप बराबर के लिए देख रहे हैं tee file1 file2 file3
, लेकिन एक ही डेटा को तीन फ़ाइलों में लिखें file1
, file2
और file3
, आप एक ही डेटा को तीन कमांड में पाइप करना चाहते हैं cmd1
, cmd2
और cmd3
,
… | ??? cmd1 cmd2 cmd3
के बराबर होना चाहिए
… | cmd1 &
… | cmd2 &
… | cmd3 &
सिवाय इसके कि …
केवल एक बार ही निष्पादित किया जाएगा।
ऐसा करने के दो तरीके हैं।
Ksh93, बैश और zsh समर्थन प्रक्रिया प्रतिस्थापन । यह पाइपों का एक सामान्यीकरण है जो कमांड के तर्क को एक फाइल बनाने की अनुमति देता है, जिसे जब लिखा जाता है, तो कमांड के इनपुट के रूप में डेटा को पास करता है (इनपुट वेरिएंट भी है, जो जब पढ़ा जाता है, तो कमांड द्वारा डेटा आउटपुट प्राप्त करता है) । अर्थात्,
echo hello | tee >(cmd1)
प्रिंट hello
मानक आउटपुट में और इसके अलावा में चलाता है cmd1
के साथ hello
इनपुट के रूप में।
इसलिए, उदाहरण के लिए, यदि आप के इनपुट को डुप्लिकेट करना चाहते हैं somecommand
और इसे दोनों को पास करना चाहते हैं cmd1
और cmd2
, आप उपयोग कर सकते हैं
somecommand | tee >(cmd1) | cmd2
यदि आपका शेल प्रक्रिया प्रतिस्थापन का समर्थन नहीं करता है, तो आप इसके बजाय नामित पाइप का उपयोग कर सकते हैं। यह कैसे काम करता है, इसके लिए Arcege का उत्तर देखें । नामांकित पाइप प्रक्रिया प्रतिस्थापन की तुलना में कम सुविधाजनक हैं क्योंकि आपको उन्हें बनाना होगा और उन्हें हटाना होगा, और मैन्युअल रूप से प्रक्रियाओं को शुरू और सिंक्रनाइज़ करना होगा। उन्हें पूरी तरह से पोर्टेबल होने का फायदा है, जबकि सभी गोले प्रक्रिया प्रतिस्थापन का समर्थन नहीं करते हैं। उनका उपयोग उन परिदृश्यों में भी किया जा सकता है जिनकी प्रक्रिया प्रतिस्थापन के अलावा है।
हुड के तहत, कुछ प्रणालियों पर, प्रक्रिया प्रतिस्थापन आंतरिक रूप से नामित पाइप का उपयोग करता है। अधिकांश प्रणालियों पर, हालांकि, यह फ़ाइल विवरणकों का प्रतिनिधित्व करने वाली नामित फ़ाइलों पर निर्भर करता है ।