एक भी नहीं है एक चर और एक पर्यावरण चर के बीच अंतर। यदि आप . foo.sh
और foo.sh
निष्पादित करते हैं तो FOO=value
पंक्ति है, तो परिवर्तनीय FOO
वर्तमान प्रक्रिया में असाइन की जाएगी। यह एक पर्यावरण चर नहीं है। एक पर्यावरण परिवर्तनीय बनने के लिए (और इस प्रकार उप-गोले के लिए उपलब्ध हो), इसे निर्यात किया जाना चाहिए। हालांकि, गोले एक विकल्प है जो सभी चर असाइनमेंट एक वातावरण चर चर को बढ़ावा देने प्रदान करते हैं, इसलिए यदि आप बस कार्य करें:
set -a
. foo.sh
set +a
तो foo.sh में सभी चर असाइनमेंट वर्तमान प्रक्रिया में वातावरण चर किया जाएगा। ध्यान दें कि यह सख्ती से सच नहीं है: बैश में, एक चर का निर्यात करने से यह वर्तमान खोल में एक वातावरण चर बन जाता है, लेकिन अन्य गोले (उदाहरण के लिए, डैश, उदाहरण के लिए) चर निर्यात करने से यह वर्तमान खोल में एक पर्यावरण चर नहीं बनता है। (यह यह subshells के वातावरण में स्थापित किया जाना कारण, तथापि करता है।)
स्रोत
2013-02-16 02:09:33
मैं एक स्क्रिप्ट bar.sh है कि स्रोत foo.sh जबकि लाइन पढ़ बनाया; निर्यात "$ लाइन" किया गया
user2077092
आपको वर्तमान वातावरण को प्रभावित करने के लिए 'स्रोत bar.sh'' की आवश्यकता होगी। – chepner
इसके अलावा, 'while' लूप' स्रोत foo.sh' के बजाय है; आपको दोनों की जरूरत नहीं है। यह गलत नहीं है, बस अनावश्यक है। – chepner