मैं एक लूप के भीतर बैश उपनाम बनाना चाहता हूं जहां लूप कमांड से लाइनें पढ़ रहा है। आउटपुट लाइन-बाय-लाइन पढ़ने के लिए, मुझे विश्वास है कि मुझे आउटपुट को read
में पाइप करने की आवश्यकता है। जब मैं ऐसा करता हूं, हालांकि, उपनाम मौजूद नहीं हैं।मैं थोड़ी देर के अंदर क्यों नहीं खोल सकता?
अगर मैं अपने .bashrc
में निम्नलिखित शामिल हैं:
for x in a1 a2; do
eval "alias $x='echo foo'"
done
echo -e "a3\na4" | while read x; do
eval "alias $x='echo foo'"
done
उपनाम a1
और a2
मौजूद हैं, लेकिन a3
और a4
नहीं है। उन दो loops के बीच क्या अंतर है?
यह एक बहुत आम गॉचा है जब 'लूप' पर पाइपिंग होता है। [यह उत्तर] देखें (http://stackoverflow.com/questions/7612320/bash-weird-variable-scope-when-populating-array-with-results/7612420#7612420), या [BashFAQ/024] (http: //mywiki.wooledge.org/BashFAQ/024) विवरण और विभिन्न वैकल्पिक समाधानों के लिए। –
इसके अलावा, यहां 'eval' का उपयोग करने की कोई आवश्यकता नहीं है। उपनाम परिभाषित करने से पहले 'xias $ x = 'echo foo'' 'x x 'का विस्तार करेगा। – chepner