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


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

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

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

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

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

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

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

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


224
2017-08-27 00:22


मूल


जब .bashrc में परिभाषित / निर्यात किया जाता है, तो यह ठीक से काम करता है। - huff
के संभावित डुप्लिकेट Google धरती और $ ब्राउजर पर्यावरण चर - Isaiah
कैसा रहेगा THEVAR=/example? - Oleh Prypin
दूसरा वैश्विक चर के बारे में है, यह कोई ऐसी सीमा नहीं जोड़ता है। मैं इसे अलग रखूंगा। - Lekensteyn
help.ubuntu.com/community/EnvironmentVariables - huff


जवाब:


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

VARNAME="my value"

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

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

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

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

sudo -H gedit /etc/environment

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

VARNAME="my value"

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

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


363
2017-08-27 07:50



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 - SudoSURoot
मुझे अपनी विशिष्ट रेखा कहां जोड़नी चाहिए ?! .bashrc पेज के नीचे ?! - Mr.Hyde
@ श्री हाइड हां, यह शायद एक उचित जगह है - Michał Šrajer
दूसरा एक पोर्टेबल क्यों है? - UniversallyUniqueID
@भारद्वाजराजू क्योंकि कुछ पुराने यूनिक्स सिस्टम पर कोई भी केवल वेरिएबल निर्यात कर सकता है जो पहले से सेट है। उदाहरण के लिए ओल्ड सोलारिस और एचपी-यूएक्स। - Michał Šrajer


एक बार पर्यावरण चर सेट करने के लिए, का उपयोग करें 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-bash-script/176788#176788


21
2017-08-27 07:20



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


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

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

15
2017-12-07 08:45



मैंने आपके जवाब को और खतरनाक बिट्स को हटाने के बारे में साफ कर लिया है sudo gedit (देख askubuntu.com/questions/270006/...) तथा chmod 777। उत्तरार्द्ध को सिस्टम कॉन्फ़िगरेशन फ़ाइल पर कभी नहीं किया जाना चाहिए। - muru
यह कुछ मामलों के लिए एक सही जवाब है। सभी सत्र, चाहे उपयोगकर्ता खोल सत्र हों या नहीं, यहां सेट चर के मान प्राप्त होंगे। यह ध्यान रखना महत्वपूर्ण है कि यह एक शेल स्क्रिप्ट की तरह दिख सकता है, यह नहीं है - यह आपको केवल पर्यावरण चर सेट करने की अनुमति देता है (बनाम शैल फ़ंक्शंस का उपयोग कर बनाम if या test) - Tom Harrison Jr
यदि बार एक स्ट्रिंग है, तो क्या मुझे इसे उद्धरण चिह्नों के बीच रखना चाहिए? पसंद Foo="bar"? - blue_chip
@blue_chip नहीं, उद्धरण के बिना काम करता है। - Click Upvote
पर्यावरण चर के लिए @blue_chip, सब कुछ एक स्ट्रिंग है। रिक्त स्थान होने पर आपको केवल उद्धरणों की आवश्यकता होती है। - Ruslan


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

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


3
2018-03-16 15:09



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


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

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

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

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

1
2017-07-12 02:06