संपादित करें:पाइप के बाईं तरफ सबहेल है?
sed '[email protected]^@ @' <(f1)
के बारे में नीचे दी गई मेरी टिप्पणी गलत $BASH_SUBSHELL
इंगित करता है कि हम प्रक्षेपण के रूप में एक ही स्तर में, चर मुख्य लिपि में खो जाते हैं कर रहे हैं। गॉर्डन्स उत्तर के आधार पर मैंने f1 > >(sed '[email protected]^@ @')
का परीक्षण किया और ऐसा लगता है कि यह सही तरीके से काम करता है। फिर भी, पहले फार्म के लिए BASH_SUBSHELL 1 और 0 नहीं होना चाहिए?
In f1, SUBSHELL: 0, i=1
In f1, SUBSHELL: 1, i=2
at end, i=1
(sed
का उद्देश्य सिर्फ कुछ करने के लिए एक पाइप के लिए है, यह उम्मीद नहीं करते:
यह छोटी परीक्षण
#!/bin/bash
declare -i i=0
function f1()
{
let i++
echo "In f1, SUBSHELL: $BASH_SUBSHELL, i=$i" >&2
}
f1
f1 | sed '[email protected]^@ @'
echo "at end, i=$i"
निम्नलिखित उत्पादन के साथ
पर विचार करें कुछ भी करने के लिए क्योंकि f1 आउटपुट stderr के लिए)
फ़ंक्शन f1 वर्तमान BASH_SUBSH लॉग करता है ELL और की मैं
मैं जानता हूँ कि क्यों स्क्रिप्ट के अंत में हम i=1
मिल वर्तमान मूल्य, इसकी वजह से दूसरे मंगलाचरण एक subshell में था, और subshell 1 पर मैं के मूल्य खो गया था।
क्या मैं नहीं जानता कि क्यों पाइप के बाईं ओर वर्तमान खोल
हालांकि मैं लगा मुझे पता है क्यों बाईं ओर है साथ sed '[email protected]^@ @' <(f1)
मैं चाहते हैं इससे बचने के सकता है कि में मार डाला नहीं किया गया है मुख्य स्क्रिप्ट
मुझे लगता है कि खोल को पाइप के दोनों सिरों को सबहेल – sehe
में रखने की अनुमति है एक त्वरित Google ने यह पाया: http://www.linuxprogrammingblog.com/pipe-in-bash-can-be-a-trap –
@ ब्रायन कि लेख पाइप के बाएं तरफ चर्चा नहीं करता है ...मुझे पहले से ही पता है कि यह पाइप – nhed