यह शेल पर निर्भर है और AFAICS का दस्तावेज नहीं है। में ksh
और bash
, पहले मामले में, foo
के रूप में ही stdin साझा करेंगे bar
। वे के आउटपुट के लिए लड़ेंगे echo
।
तो उदाहरण के लिए,
$ seq 10000 | paste - <(tr 1 X)'
1 X
2 X042
3 X043
4 X044
5 X045
[...]
आप सबूत देखते हैं कि paste
पाठ के हर दूसरे ब्लॉक को seq
आउटपुट से tr
पढ़ता है जबकि दूसरे को पढ़ता है।
इसके साथ zsh
, इसे बाहरी स्टड मिलता है (जब तक कि यह टर्मिनल नहीं है और शेल इंटरएक्टिव नहीं है, जिस स्थिति में यह पुनर्निर्देशित है /dev/null
)। ksh
(जहां इसकी उत्पत्ति हुई), zsh
और bash
प्रक्रिया प्रतिस्थापन AFAIK के समर्थन के साथ एकमात्र बॉर्न-जैसे गोले हैं।
में echo "bla" | bar < <(foo)
, ध्यान दें कि bar
स्टड के आउटपुट द्वारा खिलाया जाने वाला पाइप होगा foo
। यह अच्छी तरह से परिभाषित व्यवहार है। उस स्थिति में, ऐसा प्रतीत होता है कि foo
स्टड वह पाइप है echo
जो सभी के द्वारा खिलाया जाता है ksh
, zsh
और bash
।
यदि आप चाहते हैं कि सभी तीनों गोले में एक सुसंगत व्यवहार हो और भविष्य के प्रमाण हों, क्योंकि व्यवहार बदल सकता है क्योंकि यह दस्तावेज नहीं है, तो मैं लिखूंगा:
echo bla | { bar <(foo); }
यह सुनिश्चित करने के लिए कि foo
स्टड भी पाइप है echo
(मैं यह नहीं देख सकता कि आप ऐसा क्यों करना चाहते हैं)। या:
echo bla | bar <(foo < /dev/null)
सुनिश्चित करें कि foo
है नहीं से पाइप से पढ़ा echo
। या:
{ echo bla | bar 3<&- <(foo <&3); } 3<&0
करवाने के लिए foo
'के वर्तमान संस्करण में की तरह बाहरी stdin stdin है zsh
।