Env, setenv, Export और कब उपयोग करना है, इसमें क्या अंतर है?


18

हाल ही में मैंने देखा कि पर्यावरण चर सेट करने के लिए हमारे पास 3 विकल्प हैं:

  1. export envVar1=1
  2. setenv envVar2=2
  3. env envVAr3=3

यदि अन्य तरीके हैं, तो कृपया हमें बताएं।

मुझे एक को कब पसंद करना चाहिए? कृपया दिशा निर्देश दें।

शेल अनुकूलता के लिए, जो सबसे अधिक विस्तार है (अधिक शेल बोलियों को शामिल किया गया है)?

मैंने पहले से ही इस उत्तर पर ध्यान दिया है, लेकिन मैं envप्राथमिकता के दिशा-निर्देशों के साथ प्रश्न का विस्तार करना चाहता हूं ।

जवाबों:


15

export VARIABLE_NAME='some value'किसी भी POSIX अनुरूप खोल (में एक वातावरण चर सेट करने के लिए रास्ता है sh, dash, bash, ksh, आदि .; भी ZSH)। यदि चर का मान पहले से है, तो आप export VARIABLE_NAMEइसका मान परिवर्तित किए बिना इसे पर्यावरण चर बनाने के लिए उपयोग कर सकते हैं ।

प्री-पॉस बॉर्न गोले ने इसका समर्थन नहीं किया, यही वजह है कि आप स्क्रिप्ट देखेंगे जो इसके बजाय बचने export VARIABLE_NAME='some value'और उपयोग VARIABLE_NAME='some value'; export VARIABLE_NAMEकरते हैं। लेकिन पूर्व POSIX बॉर्न गोले आजकल बहुत दुर्लभ हैं।

setenv VARIABLE_NAME='some value'एक पर्यावरण चर सेट करने के लिए csh सिंटैक्स है। setenvश में मौजूद नहीं है, और csh को लिपियों में बहुत कम उपयोग किया जाता है और पिछले 20 वर्षों (और इससे भी लंबे समय तक zsh) के लिए इंटरैक्टिव उपयोग के लिए बैश से आगे निकल गया है, इसलिए आप इसके बारे में भूल सकते हैं जब तक कि आप इसका सामना न करें।

envआदेश में छोड़कर बहुत मुश्किल से ही उपयोगी है कुटिया लाइनों । जब तर्कों के बिना आह्वान किया जाता है, तो यह पर्यावरण को प्रदर्शित करता है, लेकिन exportक्या यह बेहतर है (छांटे गए हैं, और अक्सर अलग-अलग मूल्यों को नए रूप में मानने के लिए नए सिरे से अवगत कराया जाता है)। जब तर्कों द्वारा सक्रिय है, यह अतिरिक्त वातावरण चर के साथ एक कमांड चलाता है, लेकिन बिना ही आदेश envभी (काम करता VAR=value mycommandरन mycommandके साथ VARकरने के लिए सेट valueहै, जैसे env VAR=value mycommand)। इसका कारण envशेलबैंग लाइन में उपयोगी है कि यह PATHलुकअप करता है , और यह तब होता है जब कमांड नाम के साथ इनवॉइस करने के लिए कुछ और नहीं करना चाहिए। envकमांड के साथ केवल कुछ ही वातावरण चर के साथ एक कमांड को चलाने के लिए उपयोगी हो सकता है-i, या मापदंडों के बिना पर्यावरण को प्रदर्शित करने के लिए चर सहित अमान्य नाम है जो शेल आयात नहीं करता है।


3

एक चर को सेट करना जैसे VAR='asdf'वातावरण को असम्बद्ध किया जाता है, जिसका अर्थ है कि एक ही सत्र में आपके द्वारा लॉन्च किए जाने वाले कार्यक्रमों के बारे में कुछ नहीं पता VARहोगा और इसे एक्सेस करने में असमर्थ होंगे। शेल स्क्रिप्ट लिखते समय आप यह व्यवहार चाहते हैं।

exportदूसरी ओर, एक बैश बिल्डिन है जो पर्यावरण को संशोधित करता है और इस प्रकार निर्यात किए गए चर को वर्तमान सत्र में शुरू की गई बाल प्रक्रियाओं के लिए दृश्यमान बनाता है। आप दौड़कर भी वही हासिल कर सकते हैं VAR='asdf' %program_name%

envबिलियन नहीं है, बल्कि एक कार्यक्रम है। सतह पर यह आपके जैसे ही काम करता है VAR='asdf' %program_name%, लेकिन निचले स्तर पर चीजें थोड़ी अधिक जटिल हो जाती हैं। सबसे पहले, envलॉन्च किया जाता है। यह पर्यावरण को संशोधित करता है, फिर दिए गए तर्कों के साथ कमांड निष्पादित करता है। वही व्यवहार जिसे आप निष्पादन (3) सिस्टम कॉल का उपयोग करके अपने कोड में कर सकते हैं।

setenvexportजैसा कि आपके उत्तर में कहा गया है, केवल csh- परिवार के गोले में है।


2
आधुनिक गोले में, VAR=asdfपर्यावरण को अद्यतन करता है यदि VARपहले से ही पर्यावरण में था। (मूल बॉर्न शेल में यह सच नहीं था।)
गाइल्स का SO- रोकना

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