BASH में निर्यात क्या करता है? [डुप्लिकेट]


74

संभव डुप्लिकेट:
बैश में "ए = बी" और "ए = बी" निर्यात के बीच अंतर

यह स्वीकार करना कठिन है, लेकिन मैं वास्तव में कभी नहीं समझ पाया हूं कि वास्तव में exportपर्यावरण चर क्या करता है। मुझे पता है कि अगर मैं एक चर का निर्यात नहीं करता हूं तो मैं इसे कभी-कभी बाल प्रक्रियाओं में नहीं देख सकता हूं, लेकिन कभी-कभी ऐसा लगता है कि मैं कर सकता हूं। मेरे कहने पर वास्तव में क्या चल रहा है

export foo=5

और मुझे चर का निर्यात कब नहीं करना चाहिए?


इस विषय पर कम से कम एक अन्य उपयोगी प्रश्न का लिंक यहां दिया गया है: superuser.com/questions/143413/linux-environment-variables ... क्योंकि विडंबना यह है कि यह पहला सवाल था जो बाश में निर्यात पर मेरी क्वेरी के लिए Google पर पॉप अप हुआ था। ।
ओगरे Psalm33

1
इसके अलावा: superuser.com/questions/18988/…
ओगरे Psalm33

एक समान उपयोग यह है exportकि .bashrc / .bash_profile में समान वैश्विक वैरिएबल बनाने के लिए कथनों को जोड़ा जाए $HOME
इवान प्लाइस

सावधान, शुरू में दिखाई देने की तुलना में इस कहानी में अधिक है। मैं आपको अपना उत्तर जाँचने के लिए आमंत्रित करता हूँ।
जस्सोनलहार्ड

जवाबों:


15

से man bash:

वातावरण

जब किसी प्रोग्राम का आह्वान किया जाता है, तो उसे पर्यावरण नामक स्ट्रिंग की एक सरणी दी जाती है। यह प्रपत्र नाम = मान के नाम-मान जोड़े की एक सूची है।

शेल पर्यावरण में हेरफेर करने के कई तरीके प्रदान करता है। आह्वान पर, शेल अपने स्वयं के वातावरण को स्कैन करता है और पाया जाने वाले प्रत्येक नाम के लिए एक पैरामीटर बनाता है, स्वचालित रूप से इसे बाल प्रक्रियाओं में निर्यात के लिए चिह्नित करता है। निष्पादित आदेशों को वातावरण विरासत में मिला है। export और declare -x आदेशों मापदंडों और कार्यों के लिए जोड़ा गया है और पर्यावरण से हटाए जाने के लिए अनुमति देते हैं। यदि वातावरण में एक पैरामीटर का मान संशोधित किया गया है, तो नया मान पुराने की जगह पर्यावरण का हिस्सा बन जाता है। किसी भी निष्पादित कमांड द्वारा विरासत में प्राप्त पर्यावरण में शेल का प्रारंभिक वातावरण होता है, जिसके मूल्यों को शेल में संशोधित किया जा सकता है, unset कमांड द्वारा हटाए गए किसी भी जोड़े को कम किया जा सकता है , साथ ही निर्यात और declare -xआदेशों के माध्यम से किसी भी अतिरिक्त ।


72
IMHO किसी भी अतिरिक्त प्रयास के बिना दस्तावेज़ीकरण के एक अंश को कॉपी-पेस्ट करता है, जिसे उत्कीर्ण नहीं किया जाना चाहिए।
आर्टूर

29
वह अंश बहुत स्पष्ट नहीं है और स्पष्ट रूप से मुझे समझ नहीं आया कि क्या चल रहा है।
Trismegistos

4
@Aurur: इसके विपरीत: यदि (दस्तावेज़ से) अंश एक प्रश्न का उत्तर देता है, तो मेरे पास अतिरिक्त स्पष्टीकरण नहीं होंगे।
रेने न्यफेनेगर

1
@ Renéyffenegger लेकिन ऐसा लगता है, यह नहीं है। कम से कम, मुझे यह तब तक नहीं मिला जब तक मैं ब्लडफिलिया द्वारा एक उत्तर नहीं पढ़ता जिसे स्वीकार किया जाना चाहिए।
व्लादिस्लाव रास्ट्रुसनी

1
मेरा मानना ​​है कि अर्टूर और ट्रिस्मेगिस्टो के अंक किसी को भी पेस्ट कॉपी कर सकते हैं, यह हमेशा पर्याप्त नहीं होता है, स्पष्ट करता है और एक अच्छा उत्तर प्रदान करता है। कुछ दस्तावेज़ों को कॉपी करना या लिंक प्रदान करना ठीक है, वास्तव में इसे प्रोत्साहित किया जाता है, लेकिन कुछ अतिरिक्त गुणवत्ता स्पष्टीकरण भी होना चाहिए। इसके अलावा, उस स्पष्टीकरण को रेनेफेनेगर जैसे लोगों द्वारा आसानी से अनदेखा किया जा सकता है यदि उन्हें इसकी आवश्यकता नहीं है, लेकिन यह उन लोगों के लिए होगा जो इससे लाभान्वित होंगे। हम सभी सीखने की कोशिश कर रहे हैं और हमारे पास अलग-अलग तरीके हैं जो हमें समझ में आते हैं, यह विभिन्न प्रकार की सीखने की शैलियों को कवर करने में मदद करता है और आपकी रेटिंग में सुधार करेगा।
jasonleonhard

98

एक्सपोर्टेड वैरिएबल चाइल्ड प्रोसेस पर पास हो जाते हैं, एक्सपोर्टेड वैरिएबल नहीं।


क्या आप उस प्रभावित करने के लिए किसी भी दस्तावेज को इंगित कर सकते हैं। मैं उससे अधिक जानकारी की तलाश में हूं। उदाहरण के लिए, एक चर को केवल एक बार निर्यात करने की आवश्यकता होती है, या क्या आपको इसे हर बदलाव के बाद निर्यात करने की आवश्यकता होती है, आदि
चास।

1
आप इसे देख सकते हैं: superuser.com/questions/143413/linux-environment-variables/…
BloodPhilia

3
आप एक पथ के लिए कुछ जोड़कर इस की पुष्टि कर सकते (करने के लिए कहते हैं PYTHONPATH) और फिर यह देखते हुए कि हालांकि आप कर सकते हैं echo $PYTHONPATHयह आप जब तक अजगर या बैश लिपियों द्वारा मान्यता प्राप्त नहीं होता है exportयह
कौशिक घोष

यह जवाब पूरी तरह से सच भी नहीं लगता है। उदाहरण के लिए, बैश उप- $BASHPIDशैलियाँ , चाइल्ड-प्रोसेस (तदनुसार ) हैं और फिर भी आप मूल शेल से अनएक्सपोर्टेड वैरिएबल पढ़ सकते हैं। सरल प्रमाण: x="y"; echo "$BASHPID: $x"; (echo "$BASHPID: $x") मेरा अनुमान है कि यह एक विशेष मामला है जो तब होता है जब बच्चे की प्रक्रिया एक उप-खोल होती है।
जेपीजेड

20

जब आप उपयोग करते हैं export, तो आप चर को शेल के पर्यावरण चर सूची में जोड़ रहे हैं जिसमें निर्यात कमांड को बुलाया गया था और शेल के सभी पर्यावरण चर को बाल प्रक्रियाओं में पारित किया जाता है, अर्थात आप इसका उपयोग क्यों कर सकते हैं।

जब आप शेल को समाप्त करते हैं तो इसका पर्यावरण नष्ट हो जाता है, इसलिए पर्यावरण चर घोषित किए जाते हैं और लॉगिन पर निर्यात किए जाते हैं, उदाहरण के लिए .bashrc फ़ाइल।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.