उबंटू में `सेटेक्स` समकक्ष


10

विंडोज में एक शक्तियॉ कमांड होती है, जिसे setxयूजर या सिस्टम वातावरण में पर्यावरण चर बनाता या संशोधित करता है।

क्या उबंटू के पास एक समान कमांड है, जिसका उपयोग करके nanoया नहीं vi, केवल एक चर को जोड़ने या पर्यावरण चर प्रणाली को अपडेट करने के लिए।

कार्यान्वित समाधान

जोड़ने / अद्यतन करने के लिए एक पंक्ति

grep env_name /etc/environment && sed -i.bak 's/env_name=.*/env_name="env_value"/' /etc/environment || echo 'env_name="env_value"' >> /etc/environment

जवाबों:


12

आप इसे केवल कमांड लाइन में नया घोषित करके या फिर से घोषित करके ऐसा कर सकते हैं। उदाहरण के लिए, यदि आप ~/testfolderअपने पथ चर में जोड़ना चाहते हैं, तो आप इसे अपने वर्तमान टर्मिनल में दर्ज कर सकते हैं (यह सिर्फ एक उदाहरण है):

PATH="$HOME/testfolder:$PATH"

यह निश्चित रूप से केवल उस समय के लिए इसे बदल देगा जब आपने टर्मिनल सत्र को खुला कहा है। $यहां उपयोग को नोटिस करें, आप इसे घोषणा के लिए छोड़ देते हैं, लेकिन यदि आप इसे प्रदर्शित करना चाहते हैं, तो आपको $इसकी सामग्री को विस्तारित करने के लिए जोड़ना होगा।

यदि आप उन्हें अधिक स्थायी और सामान्य घोषित करना चाहते हैं, तो आप उन्हें अपनी ~/.bashrc(केवल आपके लिए) फाइल या /etc/bash.bashrc(सिस्टम वाइड) में जोड़ सकते हैं , उदाहरण के लिए यदि आप चाहते हैं कि उनकी गिनती केवल आपके लिए या सभी उपयोगकर्ताओं के लिए हो। एक अन्य विकल्प यह है कि इसे अपनी .profileफ़ाइल में जोड़ें (केवल अपने लिए) जहां आप लॉग इन करते हैं उस समय से यह व्यवहार्य होगा। आप echoउदाहरण के लिए ऐसा कर सकते हैं यदि आपको यकीन है कि यह चर पहले से सेट नहीं है या यदि आप नया बनाते हैं। (केवल एक उदाहरण):

echo "variable=value" >> /path/filename

यदि आप अपने उपयोगकर्ता निर्देशिका के बाहर एक फ़ाइल को संपादित करना चाहते हैं, जो तब होता है जब आप संपादित करना चाहते हैं, तो आपको /etc/bash.bashrcउपयोग करने की आवश्यकता होती है sudoऔर इसलिए आप बस यहां 'दस्तावेज़' का उपयोग नहीं कर सकते क्योंकि यह काम नहीं करेगा, इसके बजाय नीचे की तरह एक पंक्ति का उपयोग करें:

echo "variable=value" | sudo tee -a /path/filename

यदि चर पहले से मौजूद है, तो आप इसे sedकमांड (केवल एक उदाहरण के साथ) में बदल सकते हैं :

sed -i.bak 's/variable=value/variable=new-value/' /path/filename

यह फ़ाइल में वैरिएबल को एडिट करेगा लेकिन एडिट से पहले इसका बैकअप बना देगा। यदि आप अपने यूजर डायरेक्टरी के बाहर की फाइलों को सेड के साथ बदलते हैं, तो आपको sudoज्यादातर मामलों में उपयोग करने की आवश्यकता होती है, इसलिए लाइन होगी:

sudo sed -i.bak 's/variable=value/variable=new-value/' /path/filename

एक फ़ाइल से एक चर को हटाने के साथ sedही किया जा सकता है , बस रेगेक्स के दूसरे भाग को खाली छोड़ दें:

sed -i.bak 's/variable=value//' /path/filename

यदि आपकी रुचि जो पर्यावरण चर सेट हैं, तो आप envउन्हें सूचीबद्ध करने के लिए कमांड का उपयोग कर सकते हैं, ( set -o posix ; set ) | lessया sh -c set। सभी तीन विभिन्न प्रकार के आउटपुट देते हैं, ( set -o posix ; set ) | lessजो कि वास्तव में सेट किए गए सबसे अधिक चर को वापस करते हैं।


1
इसके बजाय ( set -o posix ; set )यह कहना आसान है sh -c set। यहां तक ​​कि अगर shयह एक सिमलिंक है bash(जो सामान्य रूप से आधुनिक उबंटू संस्करणों पर नहीं है) तो भी काम करेगा ।
रुस्लान

@ruslan sh -c setसिस्टम पर वास्तव में सभी पर्यावरण चर नहीं दिखा रहा है। हालाँकि मैं इसे उनमें से कुछ को दिखाने के तीसरे तरीके के रूप में शामिल करूंगा।
विदेहोनथ

वास्तव में sh -c setसभी पर्यावरण चर दिखाता है । यह सिर्फ कॉलिंग शेल के शेल वैरिएबल नहीं दिखाता है , लेकिन ये कभी भी आपको शेल से चलने वाली प्रक्रिया द्वारा विरासत में नहीं मिलते हैं, जब तक कि आप exportउन्हें नहीं लेते।
रुस्लान

क्या कभी संपादित करने का कोई वैध कारण है /etc/environment? ऐसा लगता है कि भ्रम का एक शॉर्टकट है।
रोजर लिप्सकॉम्ब

@RogerLipscombe धन्यवाद, इस बारे में निश्चित नहीं था, यह अभी भी चर को संपादित करने के लिए एक व्यवहार्य स्थान है, लेकिन मैंने भ्रम पैदा न करने के लिए इसे बाहर निकाल लिया।
वीडियोनौथ

11

के बराबर कोई प्रत्यक्ष नहीं है setx /m, लेकिन क्या setx /mकरता है को पूरा करने के तरीके हैं ।

setx /mमें डालता variable=valueहै HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment। गैर- / मी (यानी प्रति उपयोगकर्ता) setxबस में डालता variable=valueहै HKCU\Environment

आपने विशेष रूप से 'सिस्टम वाइड' के लिए कहा। उसके लिए, आप चर-मान जोड़ी को या तो /etc/environmentOR में जोड़ देंगे /etc/profile.d/<yourfile>। पूर्व का मूल्यांकन पीएएम द्वारा किया जाता है, जबकि बाद का मूल्यांकन किया जाता है /bin/sh। इस प्रकार, में /etc/profile.d/<yourfile>, आप जोड़ देंगे variable=value; export variable। (बैश भी अनुमति देता है export variable=value)। के लिए /etc/environmentआप जोड़ना होगा variable=value

प्रति-उपयोगकर्ता समकक्ष हैं ~/.pam_environmentऔर ~/.profile

इसे भी देखें: https://help.ubuntu.com/community/EnvironmentVariables


7

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

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