लिनक्स वातावरण चर सेट करना


9

मैं Red Hat Linux Enterprise 5 चला रहा हूं; मैं पर्यावरण चर सेट करने के लिए हमेशा निर्यात कमांड का उपयोग कर रहा हूं।

क्या पर्यावरण चर सेट करने के कोई अन्य तरीके हैं और उनके क्या फायदे / नुकसान हैं?

जवाबों:


16

यह बैश मैन पेज का एक अंश है:

निर्यात [-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मौजूदा माहौल का बच्चा बनने के लिए है, जिसके परिणामस्वरूप, निश्चित रूप से, बच्चा है माता-पिता।)

"स्क्रिप्ट" में चर के मूल्यों को बदल दिया जाता है। यह अब उन नए मूल्यों का उत्पादन करता है।

"स्क्रिप्ट" समाप्त होने के बाद, निष्पादन मूल वातावरण (इस मामले में कमांड लाइन) पर वापस आ जाता है। अंतिम गूंज के बाद, आप मूल मूल्यों को देखते हैं क्योंकि बच्चे के वातावरण में किए गए परिवर्तन माता-पिता को प्रभावित नहीं करते हैं।


"वर्तमान परिवेश में" का क्या अर्थ है? वर्तमान बैश स्क्रिप्ट या?
जॉर्ज 2

1
हां, इसका अर्थ है "वर्तमान स्क्रिप्ट में" या "वर्तमान इंटरैक्टिव सत्र में"। ताकि मौजूदा स्क्रिप्ट या इंटरैक्टिव सत्र के भीतर से चलाए जाने वाले निष्पादनयोग्य या स्क्रिप्ट को बाहर कर दिया जाए। इसका उद्देश्य है export- इन बाल परिवेशों के लिए चर उपलब्ध कराना।
अगली सूचना तक रोक दिया गया।

मैंने आपकी कही बातों से कुछ टकराव पाया। :-) आपने कहा था "इसलिए कि निष्पादनों या लिपियों को शामिल करता है", "बहिष्कृत" पर ध्यान दें, लेकिन आपने जो उद्धृत किया है, उसमें आपने उल्लेख किया है "आपूर्ति किए गए नाम बाद में निष्पादित कमांड के वातावरण में स्वचालित निर्यात के लिए चिह्नित हैं।" - यह "शामिल" होना चाहिए (स्वचालित निर्यात, या प्रभाव), और "बाहर नहीं"। मैं उलझन में हूँ, क्या आप कृपया स्पष्ट कर सकते हैं?
जॉर्ज 2

1
@ जॉर्ज 2: अधिक जानकारी के लिए मेरा संपादित उत्तर देखें।
अगली सूचना तक रोक दिया गया।

3

आप कहते हैं कि

मैं पर्यावरण चर सेट करने के लिए हमेशा निर्यात कमांड का उपयोग कर रहा हूं

जिस तरह से आपने यह कहा था, ऐसा लगता है कि आप वास्तव में यह पूछने की कोशिश कर रहे हैं कि आप एक पर्यावरण चर कैसे बना रहे हैं। ऐसा करने के लिए आपको अपना export VAR="foo"विवरण अपनी $ HOME / .bash_profile फ़ाइल (यदि आप bash का उपयोग कर रहे हैं) में रखना होगा । यदि आप चाहते हैं कि पर्यावरण वैरिएबल सभी उपयोगकर्ताओं के लिए बने रहे, लेकिन रूट है, तो इसे / etc / प्रोफाइल में जोड़ें। यदि आप चाहते हैं कि इसे रूट उपयोगकर्ता के लिए भी जोड़ा जाए, तो इसे /root/.bash_profile में सेट करें।

यह सभी लॉगिन शेल के लिए काम करेगा जहां बैश पसंद का शेल है। गैर लॉगिन गोले के लिए, आपको .bashrc का उपयोग करने की आवश्यकता है। मुझे अन्य गोले की पेशकश करने के लिए कोई अंतर्दृष्टि नहीं है: डी


2
आप उन फ़ाइलों के स्रोत के बारे में बैश मैन पेज के अनुभाग को फिर से पढ़ना चाहते हैं, जब वे फाइलें खट्टी हो जाएं।
अगली सूचना तक रोक दिया गया।

1
Yup ... मुझे लॉगिन और इंटरैक्टिव उलझन मिली। प्रतिबिंबित करने के लिए मेरे उत्तर का संपादन। सुधारों के लिए धन्यवाद!
व्हेल

"एक पर्यावरण चर बना रहता है" - क्या मतलब है?
जॉर्ज 2

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

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

1

निर्यात इसे करने का सबसे सीधा तरीका है, तो इसे उस पर क्यों नहीं छोड़ना चाहिए?

export VARIABLE=value    # for Bourne, bash, and similar shells
setenv VARIABLE value    # for csh and similar shells

2
बॉर्न शेल को VARIABLE = मान की आवश्यकता होती है; निर्यात VARIABLE
mpez0

1
यह भी काम करना चाहिए ...
स्टैक ओवरफ्लो

@BloodPhilia, बैश के लिए, पर्यावरण चर सेट करने का केवल एक तरीका है?
जॉर्ज 2

1
@ जॉर्ज 2 - वार्बल = मान का उपयोग करते समय, आप एक स्थानीय चर बना रहे हैं जो वर्तमान स्क्रिप्ट निष्पादन के बाद चला गया है। निर्यात का उपयोग करते समय, बच्चे प्रक्रियाएं अपनी मूल प्रक्रिया से परिवर्तनशील मान प्राप्त करती हैं। उदाहरण के लिए: FOO=BAR; executethisprogram प्रोग्राम executethisprogramवैरिएबल का मूल्य नहीं जानता FOO। दूसरी ओर, जब उपयोग किया जाता है: FOO=BAR; export FOO; executethisprogram प्रोग्राम executethisprogramको वैरिएबल का मूल्य पता चलेगा FOO
स्टैक ओवरफ्लो

1
executethisprogram है नहीं "निर्यात foo" की एक उपप्रक्रिया। यह स्क्रिप्ट का एक उपप्रोसेस (बच्चा) है जो इसे या इंटरैक्टिव (कमांड-लाइन) शेल कहता है। export FOOएक कमांड है जो वैरिएबल को चिह्नित करता है FOOताकि इसे एनवायरनमेंट की बाल प्रक्रियाओं द्वारा एक्सेस किया जा सके जिसमें कमांड जारी किया गया था। वह अभिभावक एक स्क्रिप्ट या एक इंटरैक्टिव शेल हो सकता है।
अगली सूचना तक रोक दिया गया।

1

आप भी कुछ ऐसा कर सकते हैं:

VAR=val application

उदाहरण के लिए:

LANG=C ls --help

अंग्रेजी में आउटपुट।

LANG=pl_PL ls --help

पोलिश में उत्पादन (यदि उपलब्ध है)।

श में अतीत में आप वैल = वैल एक्सपोर्ट नहीं कर सकते थे। आपको करना ही था

VAL=val; export VAL

मैं "VAR = वैल एप्लीकेशन" के बारे में उलझन में हूँ, वैल का मतलब क्या है और एप्लीकेशन का क्या मतलब है?
जॉर्ज 2

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

ls बाल पर्यावरण क्या है? मैं उलझन में हूं।
जॉर्ज 2

1
lsउस प्रक्रिया का एक बच्चा है जिससे इसे चलाया गया था। अगर मैं lsकमांड प्रॉम्प्ट पर टाइप करता हूं , तो इंटरेक्टिव शेल पेरेंट है और lsबच्चा है। अगर मेरे पास एक स्क्रिप्ट है जो उपयोग करता है lsतो स्क्रिप्ट माता-पिता है और lsबच्चा है।
अगली सूचना तक रोक दिया गया।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.