Ви помиляєтесь з тим, що /etc/environmentдля перезавантаження потрібна перезавантаження. Це неправильно. Єдиний раз, коли файл читається, це вхід у систему , коли активований стек PAM - зокрема pam_env.so, який читає файл.
Вихід із системи та їх повторне використання застосують ці зміни - і ви дійсно повинні зробити це, якщо ви хочете, щоб усі ваші процеси отримували нове середовище . Усі інші "рішення" 2 застосовуватимуть середовище лише до процесу однієї оболонки, але не до всього, що ви запускаєте через GUI, включаючи нові вікна терміналу. 1
Якщо ви все добре з цим - відсутність exportкоманд можна компенсувати за допомогою set -aта і set +a. Однак це все ще залишається поганим способом, оскільки файл також не використовує цитування. Але це повинно працювати добре:
while read -r env; do export "$env"; done
1 Менеджер сесій GNOME пропонує спосіб змінити власне середовище, але лише під час 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до нього PID, викликати 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.