यह ध्यान दिया जाना चाहिए कि प्रक्रिया प्रतिस्थापन केवल फॉर्म तक सीमित नहीं है <(command)
, जो command
फ़ाइल के रूप में आउटपुट का उपयोग करता है । यह उस फॉर्म में हो सकता है >(command)
जो किसी फाइल को इनपुट के command
रूप में अच्छी तरह से फीड करता है । @ Enzotib के उत्तर में बैश मैनुअल के उद्धरण में भी इसका उल्लेख किया गया है।
date | cat
ऊपर के उदाहरण के लिए, एक कमांड जो >(command)
समान प्रभाव को प्राप्त करने के लिए फॉर्म के प्रोसेस प्रतिस्थापन का उपयोग करता है,
date > >(cat)
ध्यान दें कि >
पहले >(cat)
आवश्यक है। यह फिर से echo
@ कालेब के उत्तर में स्पष्ट रूप से चित्रित किया जा सकता है ।
$ echo >(cat)
/dev/fd/63
तो, अतिरिक्त के बिना >
, date >(cat)
वही date /dev/fd/63
होगा जो स्टेटर को एक संदेश प्रिंट करेगा।
मान लीजिए आपके पास एक प्रोग्राम है जो केवल फ़ाइल नाम को पैरामीटर के रूप में लेता है और प्रक्रिया नहीं करता है stdin
या stdout
। मैं इसका psub.sh
वर्णन करने के लिए ओवरसाइम्प्लीफाइड स्क्रिप्ट का उपयोग करूंगा । की सामग्री psub.sh
है
#!/bin/bash
[ -e "$1" -a -e "$2" ] && awk '{print $1}' "$1" > "$2"
मूल रूप से, यह परीक्षण करता है कि इसके दोनों तर्क फाइलें हैं (जरूरी नहीं कि नियमित फाइलें) और यदि यह मामला है, तो awk "$1"
का "$2"
उपयोग करने के लिए प्रत्येक पंक्ति के पहले क्षेत्र को लिखें । फिर, एक कमांड जो अब तक उल्लिखित सभी को जोड़ती है,
./psub.sh <(printf "a a\nc c\nb b") >(sort)
यह छपेगा
a
b
c
और के बराबर है
printf "a a\nc c\nb b" | awk '{print $1}' | sort
लेकिन निम्नलिखित काम नहीं करेगा, और हमें यहां प्रक्रिया प्रतिस्थापन का उपयोग करना होगा,
printf "a a\nc c\nb b" | ./psub.sh | sort
या इसके समकक्ष रूप में
printf "a a\nc c\nb b" | ./psub.sh /dev/stdin /dev/stdout | sort
यदि ./psub.sh
यह भी पढ़ें stdin
कि उपरोक्त वर्णित के अलावा, तो ऐसा कोई समतुल्य रूप मौजूद नहीं है, और उस स्थिति में प्रक्रिया प्रतिस्थापन के बजाय हम कुछ भी उपयोग नहीं कर सकते हैं (बेशक आप एक नामित पाइप या अस्थायी फ़ाइल का उपयोग कर सकते हैं, लेकिन यह एक और है कहानी)।