Ви помиляєтесь з тим, що /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
.