पहले मैंने sourceइस तरह कमांड का उपयोग किया था:
source file_name
लेकिन मैं यह करने की कोशिश कर रहा हूं:
echo something | source
जो काम नहीं करता है।
पहले मैंने sourceइस तरह कमांड का उपयोग किया था:
source file_name
लेकिन मैं यह करने की कोशिश कर रहा हूं:
echo something | source
जो काम नहीं करता है।
जवाबों:
चूंकि source(या .) एक फ़ाइल को तर्क के रूप में लेता है, आप कोशिश कर सकते हैं:
source <(echo something)
आपके स्रोत कमांड को एक फ़ाइल तर्क की आवश्यकता है। आप एक प्रक्रिया प्रतिस्थापन के साथ कुछ गोले में प्राप्त कर सकते हैं, और इसका कारण यह है कि इसी तरह से खोल प्रतिस्थापित करता है ...
arg=$(echo hi)
... echoवहाँ सब-कमांड के आउटपुट के साथ कमांड-लाइन पर बिट, प्रक्रिया प्रतिस्थापन के मामले में यह उप-नाम को एक फ़ाइल के साथ बदल देता है - आमतौर पर /dev/fd/62या कुछ - एक फ़ाइल-डिस्क्रिप्टर के लिए कुछ लिंक। एक पाइप के साथ फाइल डिस्क्रिप्टर 0 है ...
echo 'echo hi' | . /dev/fd/0
... /dev/stdinया जैसा भी मामला हो सकता है किसी भी लिनक्स सिस्टम पर ठीक काम करना चाहिए - और इसके अलावा कई अन्य। आप यहाँ भी इसी तरह के दस्तावेजों का उपयोग कर सकते हैं:
. /dev/fd/3 3<<HI
$(echo 'echo hi')
HI
आप अपने शेल को प्रोसेस प्रतिस्थापन के तरीके को सत्यापित कर सकते हैं, जिस तरह से:
(set -x; readlink <(:))
... जो प्रिंट (में bash) :
+ set +x
+ readlink /dev/fd/63
++ :
pipe:[2212581]
... और इसलिए हम देख सकते हैं कि शेल प्रतिस्थापन कर रहा है और readlinkएक एनोमी पाइप से पढ़ रहा है जो फ़ाइल-डिस्क्रिप्टर 63 पर खुलता है।