एक बात जो आप गलत समझ रहे हैं वह यह है कि /etc/environment
पुनः लोड करने के लिए रिबूट की आवश्यकता होती है। यह गलत है। फ़ाइल को पढ़ने का एकमात्र समय लॉगिन पर होता है , जब PAM स्टैक सक्रिय होता है - विशेष रूप से pam_env.so
, जो फ़ाइल को पढ़ता है।
लॉग आउट और बैक इन परिवर्तनों को लागू करेगा - और वास्तव में आपको ऐसा करना होगा यदि आप चाहते हैं कि आपकी सभी प्रक्रियाएं नए वातावरण प्राप्त करें । अन्य सभी "समाधान" 2 केवल एकल शेल प्रक्रिया के लिए पर्यावरण को लागू करेंगे, लेकिन नए टर्मिनल विंडो सहित GUI के माध्यम से आपके द्वारा लॉन्च किए गए कुछ भी नहीं। 1
यदि आप इसके साथ ठीक हैं, हालांकि - export
आदेशों की कमी के साथ set -a
और के लिए मुआवजा दिया जा सकता है set +a
। हालाँकि, यह अभी भी एक खराब तरीका है, क्योंकि फ़ाइल या तो उद्धरण का उपयोग नहीं करती है। लेकिन यह ठीक काम करना चाहिए:
while read -r env; do export "$env"; done
1 गनोम सत्र प्रबंधक अपने स्वयं के वातावरण को बदलने का एक तरीका प्रदान करता है, लेकिन केवल Initialization
चरण के दौरान :
$ gdbus call -e -d org.gnome.SessionManager \
-o /org/gnome/SessionManager \
-m org.gnome.SessionManager.Setenv \
"FOO" "bar"
Error: GDBus.Error:org.gnome.SessionManager.NotInInitialization: Setenv
interface is only available during the Initialization phase
2 gdb
एक समाधान नहीं है, लेकिन कभी-कभी इसका इस्तेमाल किया जा सकता है। आपको इसे अपने सत्र प्रबंधक (जैसे gnome-session
), आपके विंडो मैनेजर (जैसे gnome-shell
या openbox
), आपके टास्कबार / पैनल यदि कोई हो (जैसे xfce4-panel
) की रनिंग प्रक्रियाओं से जोड़ना होगा , और आम तौर पर ऐसा कुछ भी जो संभवतः सामान चलाएगा। उन प्रक्रियाओं में से प्रत्येक के लिए, आपको gdb
पीआईडी द्वारा इसे संलग्न करने की आवश्यकता है , putenv()
फ़ंक्शन का उपयोग करके आह्वान करें p
, फिर उपयोग करके अलग करें q
:
$ sudo gdb -p $(pidof gnome-session)
GNU gdb (GDB) 7.7.1
[...]
Attaching to process 718
[...]
0x00007fc2cefed81d in poll () from /usr/lib/libc.so.6
(gdb) p putenv("FOO=bar")
$1 = 0
(gdb) p putenv("BAZ=qux")
$2 = 0
(gdb) q
A debugging session is active.
Quit anyway? (y or n) y
Detaching from program: /usr/bin/gnome-session, process 718
ध्यान दें कि डिबगर प्रक्रिया को रोक देता है, इसलिए आपको विंडो प्रबंधकों को केवल एक अन्य tty (वर्चुअल कंसोल) या SSH के ऊपर से कंपोज करना होगा, अन्यथा स्क्रीन फ्रीज हो जाएगी।
इसके अलावा, आपको dbus-daemon द्वारा उपयोग किए जाने वाले पर्यावरण को भी अपडेट करना चाहिए:
$ dbus-update-activation-environment --systemd FOO=bar BAZ=qux
पुराने सिस्टम के लिए:
$ gdbus call -e -d org.freedesktop.DBus \
-o /org/freedesktop/DBus \
-m org.freedesktop.DBus.UpdateActivationEnvironment \
"{'FOO': 'bar', 'BAZ': 'qux'}"
()
for line in $( cat /etc/environment ) ; do export $line ; done
, यदि फ़ाइल प्रारूप हैkey=value
।