मैं पर्यावरण चर कैसे जोड़ूं?


363

मैं Ubuntu 11.04 चला रहा हूं। मैं एक बैश सत्र शुरू करने के लिए टर्मिनल का उपयोग करता हूं, और मैं एक पर्यावरण चर जोड़ना चाहता हूं:

$r@hajt:~$ env THEVAR=/example

लेकिन यह काम नहीं कर रहा है। यह THEVAR के साथ पिछले एक होने के साथ सभी चर दिखाता है, लेकिन एक और कॉल अब envनहीं दिखाता THEVARहै- env | grep THEVARकुछ भी नहीं देता है।

इसी तरह, निर्यात वाली स्क्रिप्ट ( export THEVAR=/example) या अन्य चर असाइनमेंट ( THEVAR=/example) पर्यावरण चर नहीं जोड़ते हैं।

मुझे पता है कि मैं कुछ गलत कर रहा हूं, मुझे पता है कि यह कुछ सरल होना चाहिए, लेकिन मुझे अभी पता नहीं चल पाया है।

अद्यतन: मेरे सवाल का वास्तविक अर्थ यह था: https://stackoverflow.com/questions/496702/can-a-shell-script-set-environment-variables-of-the-calling-chell

(हालांकि मैं सबसे अधिक वोट किए गए उत्तर को चुनूंगा और संपादित शीर्षक को छोड़ दूंगा-यह वह नहीं था जो मैं पूछ रहा था)

env एक संशोधित वातावरण में एक कार्यक्रम चलाता है, फिर सभी परिवर्तनों को खारिज कर देता है।


1
जब .bashrc में परिभाषित / निर्यात किया जाता है, तो यह ठीक से काम करता है।
०।


1
कैसे के बारे में THEVAR=/example?
ओलेह प्रिंपी

2
दूसरा वैश्विक चर के बारे में है, यह एक ऐसी सीमा नहीं जोड़ता है। मैं इसे अलग रखूंगा।
लेकेन्स्टाइन

जवाबों:


569

केवल वर्तमान शेल के लिए चर सेट करने के लिए:

VARNAME="my value"

वर्तमान शेल के लिए इसे सेट करने के लिए और वर्तमान शेल से शुरू हुई सभी प्रक्रियाएं :

export VARNAME="my value"      # shorter, less portable version

भविष्य के सभी बैश सत्रों के लिए इसे स्थायी रूप से सेट करने के लिए .bashrcअपनी $HOMEनिर्देशिका में अपनी फ़ाइल में ऐसी रेखा जोड़ें ।

इसे स्थायी रूप से सेट करने के लिए, और सिस्टम वाइड (सभी उपयोगकर्ता, सभी प्रक्रियाएं) / etc / वातावरण में सेट चर जोड़ें:

sudo -H gedit /etc/environment

यह फ़ाइल केवल चर असाइनमेंट को स्वीकार करती है जैसे:

VARNAME="my value"

exportयहां कीवर्ड का उपयोग न करें।

आपको वर्तमान उपयोगकर्ता से लॉगआउट करने और फिर से लॉगिन करने की आवश्यकता है ताकि पर्यावरण चर परिवर्तन हो सकें।


29
Shell config files such as ~/.bashrc, ~/.bash_profile, and ~/.bash_login are often suggested for setting environment variables. While this may work on Bash shells for programs started from the shell, variables set in those files are not available by default to programs started from the graphical environment in a desktop session. help.ubuntu.com/community/EnvironmentVariables
सूडसुरूट

1
@ श्रीमान हाँ, यह शायद एक उचित जगह है
मिशैल Decrajer

1
@ भारद्वाजराजू क्योंकि कुछ पुराने यूनिक्स प्रणालियों पर केवल वही चर निर्यात किया जा सकता है जो पहले से ही सेट है। उदाहरण के लिए पुराने सोलारिस और एचपी-यूएक्स।
मिचेल erजेर

1
एक बार जब आप पर्यावरण चर सेट करते हैं, तो मैं यह सुनिश्चित करने के लिए जल्दी से कैसे देख सकता हूं कि यह सेट है?
रॉड

1
@ रोडecho $myvar
क्वर्टी

29

एक बार पर्यावरण चर सेट करने exportके लिए, प्रॉम्प्ट में कमांड का उपयोग करें , शेल स्क्रिप्ट में नहीं:

$ export THEVAR=/example

चर को शेल सत्र के शेष भाग के लिए या जब तक कि सेट नहीं किया जाएगा।

हर बार एक पर्यावरण चर सेट करने के लिए, फ़ाइल exportमें कमांड .bashrc(या आपके शेल के लिए उपयुक्त आरंभीकरण फ़ाइल) का उपयोग करें।

स्क्रिप्ट से वातावरण चर सेट करने के लिए, exportस्क्रिप्ट और फिर स्क्रिप्ट में कमांड का उपयोग करें source। यदि आप स्क्रिप्ट निष्पादित करते हैं तो यह काम नहीं करेगा।

सोर्सिंग और निष्पादित करने के बीच के अंतर की व्याख्या के लिए इस उत्तर को देखें: https://superuser.com/questions/176783/what-is-the-difference-between-executing-a-bash-script-and-sourcing-a- बैश स्क्रिप्ट / 176,788 # 176,788


4
मैं केवल स्क्रिप्ट निष्पादित करके इसे कैसे काम कर सकता हूं? बिना सोर्सिंग के।
मिथिला

19

उबंटू में एक नया पर्यावरण चर स्थायी रूप से जोड़ने के लिए (केवल 14.04 में परीक्षण किया गया), निम्नलिखित चरणों का उपयोग करें:

  1. एक टर्मिनल खोलें (दबाकर CtrlAltT)
  2. sudo -H gedit /etc/environment
  3. अपना पासवर्ड टाइप करें
  4. केवल खोली गई पाठ फ़ाइल को संपादित करें:
    जैसे यदि आप जोड़ना चाहते हैं FOO=bar, तो बस FOO=barएक नई पंक्ति में लिखें
  5. बचाओ
  6. एक बार सहेजने के बाद, लॉगआउट करें और फिर से लॉगिन करें।
  7. आपके आवश्यक परिवर्तन किए गए हैं।

5
मैंने आपके उत्तर को और अधिक खतरनाक बिट्स के बारे में हटाते हुए साफ कर दिया है sudo gedit(देखें askubuntu.com/questions/270006/… ) और chmod 777। उत्तरार्द्ध को सिस्टम कॉन्फ़िगरेशन फ़ाइल पर कभी नहीं किया जाना चाहिए।
मुरु

यह कुछ मामलों के लिए एक सही उत्तर है। सभी सत्र, चाहे उपयोगकर्ता शेल सत्र हों या न हों, यहां सेट किए गए चर का मान मिलेगा। यह ध्यान रखें कि यह एक खोल स्क्रिप्ट की तरह लग सकता है, जबकि महत्वपूर्ण है, यह नहीं है - यह आप केवल (जैसा शेल फ़ंक्शन का उपयोग बनाम वातावरण चर सेट करने के लिए अनुमति देता है ifया test)
टॉम हैरिसन जूनियर

यदि बार एक स्ट्रिंग है, तो क्या मुझे इसे उद्धरण चिह्नों के बीच रखना चाहिए? पसंद है Foo="bar"?
ब्लू_चिप

@blue_chip नहीं, बिना उद्धरण के काम करता है।
अपवोट

4
पर्यावरण चर के लिए @blue_chip, सब कुछ एक स्ट्रिंग है। आपको केवल उद्धरण चिह्नों की आवश्यकता होती है जब इसमें रिक्त स्थान होते हैं।
रुस्लान

8

स्क्रिप्ट पूरा होने के बाद बने रहने के लिए वातावरण / संस्करण परिवर्तन प्राप्त करने के लिए, आपको source ./script.shस्रोत के लिए शॉर्टहैंड नोटेशन का उपयोग करना होगा , ",", जैसे।. ./script.sh

स्रोत स्क्रिप्ट में आदेशों को निष्पादित करेगा जैसे कि आपने उन्हें टाइप किया है ... इसलिए यह स्क्रिप्ट के कुछ पहलुओं को बदल देता है, जैसे बाहर निकलना ... इसलिए यदि आपकी स्क्रिप्ट कुछ जांचती है और उदाहरण के लिए झूठे होने पर बाहर निकलने का फैसला करती है कॉलिंग के माध्यम से exit 0, यह आपके वर्तमान टर्मिनल / शेल सत्र को समाप्त कर देगा।


यह एक बहुत पुराना सवाल है, जिसमें पहले से ही एक स्वीकृत उत्तर और कुछ अन्य हैं ... विचार करें, अधिक हाल के सवालों के जवाब कृपया ...
NerdOfCode

3
@NerdOfCode यह उत्तर एक ऐसी समस्या का समाधान करता है जो अभी भी प्रासंगिक है और स्वीकृत उत्तर सहित अन्य उत्तरों में से कोई भी नहीं है, इसका उल्लेख करें, जहां तक ​​मैं देख सकता हूं ... वास्तव में पुराने प्रश्नों के अच्छे उत्तर प्रदान करने के लिए दो बैज उपलब्ध हैं, इसलिए इसे प्रोत्साहित किया जाता है
ज़ना

1
यह वास्तव में मैं क्या देख रहा था। मुझे स्क्रिप्ट से बाहर देखने की जरूरत है, स्क्रिप्ट से निर्यात किए गए चर।
अल्बानक्स

5

यदि आप स्क्रिप्ट के माध्यम से चीजें कर रहे हैं, तो पर्यावरण चर को स्थायी रूप से सेट करने का एक आसान तरीका आपकी स्क्रिप्ट में कथन के नीचे रखा गया है,

if [[ ! -d "$MyVar" ]]; then 
    export MyVar="abc"
    echo 'export MyVar="abc"' >> ~/.bashrc
fi

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

echo "export EIGEN_ROOT=\"$(pwd)/eigen\"" >> ~/.bashrc

1

मुझे पता है कि यह बहुत देर हो चुकी है, लेकिन यदि आप सभी उपयोगकर्ताओं के लिए एक पर्यावरण चर जोड़ना चाहते हैं (उदाहरण JAVA उपयोग) - तो आप निम्नलिखित कार्य कर सकते हैं:

1) /etc/bash.bashrcनैनो का उपयोग करके खोलें (आप जो भी संपादक का उपयोग कर सकते हैं, मैं वीआईएम को पसंद नहीं करता हूं क्योंकि यह सबसे खराब है जब यह उपयोगकर्ता मित्रता - व्यक्तिगत रूप से आता है)।

2) फ़ाइल में जोड़ें:

export VAR=path export PATH=$PATH:/bin 3) (बेहतर होगा कि आप बॉक्स को उछाल सकें) - या बस एक नया SSH सत्र खोलें और `env 'कमांड का उपयोग करके पुष्टि करें।

लेकिन यदि आप चाहते हैं कि प्रत्येक उपयोगकर्ता को इसके लिए एक अलग सेटिंग हो, तो आपको (या यदि आप Linux सिस्टम में नए हैं ) .bashrcफाइल करने के लिए एक परिवर्तन (स्क्रिप्टेड) ​​करना होगा~/.bashrc/home/$USER/

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