जवाबों:
यह बैश मैन पेज का एक अंश है:
निर्यात [-fn] [नाम [= शब्द]] ...
निर्यात -पी
आपूर्ति नाम बाद में निष्पादित आदेशों के पर्यावरण के लिए स्वचालित निर्यात के लिए चिह्नित हैं। यदि -f विकल्प दिया जाता है, तो नाम कार्यों को संदर्भित करते हैं ...
यदि आपको वर्तमान परिवेश में केवल चर की आवश्यकता है, तो निर्यात का उपयोग करना आवश्यक नहीं है।
var=value
संपादित करें:
निर्यात के बिना: केवल वर्तमान वातावरण। निर्यात के साथ: वर्तमान वातावरण और बाल वातावरण।
यहां बाल परिवेश में एक चर की उपलब्धता पर निर्यात के प्रभाव का प्रदर्शन है और बाल पर्यावरण में परिवर्तन माता-पिता को प्रभावित नहीं करते हैं:
$ var1=123
$ export var2=456
$ echo "parent [$var1] [$var2] [$var3]"
parent [123] [456] []
$ var3=789 bash -c 'echo "child [$var1] [$var2] [$var3]"; var1=111; var2=222; var3=333; echo "child [$var1] [$var2] [$var3]"'
child [] [456] [789]
child [111] [222] [333]
$ echo "parent [$var1] [$var2] [$var3]"
parent [123] [456] []
पहले गूंज के बाद ( echo "parent..."
) आप "123" और "456" को देखने के दोनों क्योंकि var1
और var2
वर्तमान वातावरण में सक्रिय हैं। आपको इसके लिए कोई मान दिखाई नहीं देता var3
क्योंकि यह अभी तक सेट नहीं किया गया है।
" var3=...
" शुरू होने वाली लाइन के बाद आपको इसका कोई मूल्य दिखाई नहीं देता var1
क्योंकि इसे निर्यात नहीं किया गया था। आप इसके लिए एक मूल्य देखते हैं var2
क्योंकि यह निर्यात किया गया था । आप इसके लिए एक मूल्य देखते हैं var3
क्योंकि यह केवल बाल पर्यावरण के लिए निर्धारित किया गया था ।
( विकल्प bash -c
के लिए तर्क की सामग्री के साथ एक स्क्रिप्ट चलाने के बराबर है -c
। एक स्क्रिप्ट या अन्य निष्पादन योग्य या, इस मामले में, तर्क bash -c
मौजूदा माहौल का बच्चा बनने के लिए है, जिसके परिणामस्वरूप, निश्चित रूप से, बच्चा है माता-पिता।)
"स्क्रिप्ट" में चर के मूल्यों को बदल दिया जाता है। यह अब उन नए मूल्यों का उत्पादन करता है।
"स्क्रिप्ट" समाप्त होने के बाद, निष्पादन मूल वातावरण (इस मामले में कमांड लाइन) पर वापस आ जाता है। अंतिम गूंज के बाद, आप मूल मूल्यों को देखते हैं क्योंकि बच्चे के वातावरण में किए गए परिवर्तन माता-पिता को प्रभावित नहीं करते हैं।
export
- इन बाल परिवेशों के लिए चर उपलब्ध कराना।
आप कहते हैं कि
मैं पर्यावरण चर सेट करने के लिए हमेशा निर्यात कमांड का उपयोग कर रहा हूं
जिस तरह से आपने यह कहा था, ऐसा लगता है कि आप वास्तव में यह पूछने की कोशिश कर रहे हैं कि आप एक पर्यावरण चर कैसे बना रहे हैं। ऐसा करने के लिए आपको अपना export VAR="foo"
विवरण अपनी $ HOME / .bash_profile फ़ाइल (यदि आप bash का उपयोग कर रहे हैं) में रखना होगा । यदि आप चाहते हैं कि पर्यावरण वैरिएबल सभी उपयोगकर्ताओं के लिए बने रहे, लेकिन रूट है, तो इसे / etc / प्रोफाइल में जोड़ें। यदि आप चाहते हैं कि इसे रूट उपयोगकर्ता के लिए भी जोड़ा जाए, तो इसे /root/.bash_profile में सेट करें।
यह सभी लॉगिन शेल के लिए काम करेगा जहां बैश पसंद का शेल है। गैर लॉगिन गोले के लिए, आपको .bashrc का उपयोग करने की आवश्यकता है। मुझे अन्य गोले की पेशकश करने के लिए कोई अंतर्दृष्टि नहीं है: डी
निर्यात इसे करने का सबसे सीधा तरीका है, तो इसे उस पर क्यों नहीं छोड़ना चाहिए?
export VARIABLE=value # for Bourne, bash, and similar shells
setenv VARIABLE value # for csh and similar shells
FOO=BAR; executethisprogram
प्रोग्राम executethisprogram
वैरिएबल का मूल्य नहीं जानता FOO
। दूसरी ओर, जब उपयोग किया जाता है: FOO=BAR; export FOO; executethisprogram
प्रोग्राम executethisprogram
को वैरिएबल का मूल्य पता चलेगा FOO
।
export FOO
एक कमांड है जो वैरिएबल को चिह्नित करता है FOO
ताकि इसे एनवायरनमेंट की बाल प्रक्रियाओं द्वारा एक्सेस किया जा सके जिसमें कमांड जारी किया गया था। वह अभिभावक एक स्क्रिप्ट या एक इंटरैक्टिव शेल हो सकता है।
आप भी कुछ ऐसा कर सकते हैं:
VAR=val application
उदाहरण के लिए:
LANG=C ls --help
अंग्रेजी में आउटपुट।
LANG=pl_PL ls --help
पोलिश में उत्पादन (यदि उपलब्ध है)।
श में अतीत में आप वैल = वैल एक्सपोर्ट नहीं कर सकते थे। आपको करना ही था
VAL=val; export VAL
ls
वर्तमान (जनक) वातावरण में उस चर के मूल्य को प्रभावित किए बिना, बाल पर्यावरण ( उदाहरण के लिए) के लिए चर का मान निर्धारित करते हैं।
ls
उस प्रक्रिया का एक बच्चा है जिससे इसे चलाया गया था। अगर मैं ls
कमांड प्रॉम्प्ट पर टाइप करता हूं , तो इंटरेक्टिव शेल पेरेंट है और ls
बच्चा है। अगर मेरे पास एक स्क्रिप्ट है जो उपयोग करता है ls
तो स्क्रिप्ट माता-पिता है और ls
बच्चा है।