जवाबों:
/etc/environment
अद्यतन केवल अगले सत्र पर काम करेंगे, यह स्वतः ही पुनः लोड नहीं है।
इसका मतलब है कि आप इसे उन सत्रों के लिए नहीं बदल सकते जो पहले ही अन्य उपयोगकर्ताओं के लिए शुरू हो चुके हैं।
यदि आप जो कुछ भी चाहते हैं उसे "पुनः लोड" करना चाहते हैं, तो /etc/environment
आपको निम्नलिखित कमांड की आवश्यकता होगी:
source /etc/environment
लेकिन फिर से यह केवल आपके वर्तमान सत्र के लिए काम करेगा, अन्य उपयोगकर्ता तब तक प्रभावित नहीं होंगे जब तक कि वे एक नया सत्र शुरू नहीं करते हैं या अपने स्वयं के सत्र में उपरोक्त आदेश चलाते हैं।
ये कॉन्फिग्रेशन फ़ाइलें कि क्या वैश्विक ( या) /etc/environment
, /etc/profile
या उपयोगकर्ता-विशिष्ट ( ) ~/.profile
, ~/.bashrc
केवल अगले लॉगिन / सत्र पर संसाधित होती हैं।
वैश्विक फ़ाइलें सभी उपयोगकर्ताओं (न केवल रूट) पर लागू होते हैं ... लेकिन आप परिवर्तन वातावरण में परिलक्षित देखने के लिए अपनी प्रवेश सत्र को पुनः आरंभ करने की है। यह su
आपके द्वारा देखे गए के रूप में ... या लॉग आउट करके या रीबूट करके कॉल किया जा सकता है । आप su
एक गैर-रूट उपयोगकर्ता के लिए कर सकते हैं और आप देखेंगे कि उनके पास पर्यावरण परिवर्तन भी हैं।
वैश्विक वातावरण को प्राप्त करने के लिए आपको फिर से रीबूट या लॉगिन करने की आवश्यकता है क्योंकि पर्यावरण को मूल प्रक्रियाओं से विरासत में मिला है और आपके द्वारा चलाए जाने वाले हर चीज के लिए मूल प्रक्रिया आपका लॉगिन शेल है ... इसलिए यदि आपका लॉगिन शेल नहीं है पर्यावरण ... फिर न तो लॉगिन शेल के भीतर प्रक्रियाएं शुरू हुईं। आप निश्चित रूप से व्यक्तिगत प्रक्रियाओं के लिए वातावरण सेट / अपडेट कर सकते हैं जैसा कि आप उन्हें शुरू करते हैं, लेकिन आपको लॉगिन शेल के लिए वातावरण सेट करना होगा और परिवर्तन देखने के लिए उनके लिए सभी उप प्रक्रियाओं को पुनरारंभ करना होगा।
जैसा कि किसी और ने उल्लेख किया है, आपको बदलावों के लिए रिबूट या लॉगआउट / लॉगिन की आवश्यकता है /etc/profile
, /etc/profile.d/*.sh
और /etc/environment
उठाया जाना है।
ऐसा इसलिए है क्योंकि ये फ़ाइलें वैश्विक वातावरण को निर्दिष्ट करती हैं ... वे केवल एक बार लॉगिन पर चलती हैं और इसलिए मौजूदा लॉगिन / सत्र उन फ़ाइलों में परिवर्तन को प्रतिबिंबित नहीं करेंगे। एक रिबूट हर किसी के लॉगिन को "रीसेट" करता है जो उन्हें नए वातावरण को चुनने के लिए मजबूर करता है।
अपने स्वयं के लॉगिन सत्र में आप source /etc/profile
रिबूट या लॉगआउट / लॉगिन के बिना परिवर्तनों को लेने के लिए कर सकते हैं ... लेकिन यह केवल आपके सत्र और आपके सत्र के भीतर चलने वाली नई प्रक्रियाओं को प्रभावित करेगा।
ध्यान दें कि इसमें कोई वैरिएबल इंटरपोलेशन नहीं है /etc/environment
(यह एक स्क्रिप्ट नहीं है) इसलिए आप PATH="$PATH:/my/custom/path"
वहां सामान नहीं कर सकते ।
ध्यान दें कि /etc/profile
और /etc/profile.d/*.sh
केवल लॉगिन सत्रों के लिए चलाए जाते हैं और इसलिए कॉन्फ़िगर किया गया वातावरण वहां गैर-लॉगिन खातों के लिए उपलब्ध नहीं होगा (अर्थात यदि आप एक डीमन प्रक्रिया के लिए एक पर्यावरण चर सेट करने का प्रयास कर रहे हैं जो आपके लॉगिन शेल के बाहर चलता है)।
नोट है कि bashrc
पूरे लॉगिन खोल के लिए लेकिन बैश के गोले और उप प्रक्रियाओं के लिए पर्यावरण की स्थापना के लिए उपयोगी नहीं है ... इसलिए के लिए सच "वैश्विक" या "उपयोगकर्ता वैश्विक" आप शायद में अपने वातावरण config रखना चाहते हैं /etc/profile
या /etc/profile.d/my-custom-env.sh
या ~/.profile
। अन्य गोले (जैसे zsh) की अपनी स्वयं की कॉन्फिग फाइलें होती हैं और साथ ही bashrc में नॉन-बैश-स्पेसिफिक एनवायरनमेंट कॉन्फिगरेशन के कारण समस्याएँ या भ्रम पैदा हो जाता है, यदि आप गोले को स्विच करते हैं (या अलग शेल के उपयोग से सिस्टम पर अन्य उपयोगकर्ता हैं)।
एक नया कार्यक्रम स्थापित करना एक सामान्य समस्या है और इसे ठीक से चलाने के लिए कुछ वातावरण को निर्दिष्ट करने की आवश्यकता है। वैश्विक पर्यावरण एक उत्तर है, लेकिन अक्सर एक रिबूट की आवश्यकता होगी जो सर्वर और ऑटो-प्रोविजनिंग / कॉन्फ़िगरेशन मामलों का उपयोग करने के लिए आदर्श नहीं है। आपको अपने आप से पूछना चाहिए कि क्या यह वास्तव में एक चर है जिसे सिस्टम पर सभी उपयोगकर्ताओं और कार्यक्रमों की आवश्यकता है या यदि यह वास्तव में सिर्फ एक ऐसी चीज है जो आपको किसी विशिष्ट उपयोगकर्ता या कार्यक्रम को उपलब्ध कराने की आवश्यकता है।
उपयोगकर्ता के घर निर्देशिका (जैसे ~/.profile
~/.bashrc
) में प्रोफ़ाइल या बैशकेक में पर्यावरण को शामिल करें , इस पर निर्भर करता है कि क्या आप इंटरैक्टिव, लॉगिन गोले, बैश-केवल, आदि के लिए यह चाहते हैं।
ध्यान रखें कि इसके लिए उपयोगकर्ता के सत्र के भीतर सभी प्रक्रियाओं के लिए उपलब्ध होने वाले पर्यावरण परिवर्तनों के लिए रिबूट या लॉगआउट / लॉगिन की भी आवश्यकता होती है। उपयोगकर्ता कर सकता है source ~/.profile
... लेकिन यह एक टर्मिनल के भीतर किया जाता है और केवल उस टर्मिनल सत्र और बच्चे की प्रक्रियाओं के भीतर पर्यावरण को अद्यतन करता है ... जरूरी नहीं कि उपयोगकर्ता के संपूर्ण लॉगिन वातावरण के लिए।
एक कमांड चलाने के दौरान पर्यावरण प्रदान करना है:
VAR_NAME="VAR VALUE" VAR2_NAME="VAR2_VALUE" /path/to/program --opt1 --op2
क्या आप systemd उपयोग कर रहे हैं यह भी के तहत इकाई / सेवा फ़ाइल में पर्यावरण निर्दिष्ट कर सकते हैं [Service]
साथEnvironment=VAR_NAME="VAR VALUE" VAR2_NAME="VAR2_VALUE
यह विकल्प आपको क्लिंकी लग सकता है क्योंकि आपको हर बार प्रोग्राम चलाने के दौरान पर्यावरण को निर्दिष्ट करना पड़ता है, लेकिन अगर पर्यावरण को वास्तव में केवल उस प्रोग्राम की आवश्यकता है ... यह वास्तव में सबसे अच्छा तरीका है और आपको इसकी आदत डालनी चाहिए और सब कुछ डंप नहीं करना चाहिए एक bashrc या प्रोफाइल फाइल में।
यदि आप सेटअप वातावरण के लिए systemd या init का उपयोग नहीं कर रहे हैं और प्रोग्राम चला रहे हैं ... तो निश्चित रूप से आप बस प्रोग्राम को एक bash स्क्रिप्ट के साथ लपेट सकते हैं जहाँ आप सुविधा के लिए पर्यावरण सेटअप सहित पूरी कमांड को सहेजते हैं।
यहाँ एक बहुत विस्तृत उत्तर भी है जो मैं आपको पढ़ने का सुझाव देता हूं: /ubuntu//a/247769/824160
के तहत एक कस्टम शेल स्क्रिप्ट बनाएं
/etc/profile.d/
अपनी बनाई हुई स्क्रिप्ट, रिबूट मशीन के अंदर अपने वैश्विक पर्यावरण चर को जोड़ें, तो यह सभी के लिए उपलब्ध होगा।
/etc/environment
मेरे लिए काम करने के लिए एक चर जोड़ना ।
हालाँकि मुझे /etc/environment
परिवर्तन को प्रभावी होने के लिए बदलने के बाद रिबूट करना पड़ा। बस टर्मिनल विंडो को बंद करना और फिर से खोलना पर्याप्त नहीं था।
source /etc/environment
इसे पुनः लोड करने के लिए हमेशा ए कर सकते हैं ।