Một điều bạn nhầm lẫn là /etc/environmentyêu cầu khởi động lại để tải lại. Điều này là không đúng. Lần duy nhất tệp được đọc là khi đăng nhập , khi ngăn xếp PAM được kích hoạt - cụ thể pam_env.solà đọc tệp.
Đăng xuất và đăng nhập lại sẽ áp dụng các thay đổi - và trên thực tế bạn phải làm điều này nếu bạn muốn tất cả các quy trình của mình nhận được môi trường mới . Tất cả các "giải pháp" 2 khác sẽ chỉ áp dụng môi trường cho quy trình shell đơn, nhưng không áp dụng cho bất kỳ thứ gì bạn khởi chạy thông qua GUI bao gồm các cửa sổ đầu cuối mới. 1
Tuy nhiên, nếu bạn ổn với điều đó - việc thiếu các exportlệnh có thể được bù bằng set -avà set +a. Tuy nhiên, nó vẫn là một cách kém, vì tập tin cũng không sử dụng trích dẫn. Nhưng điều này sẽ hoạt động tốt:
while read -r env; do export "$env"; done
1 Trình quản lý phiên Gnome cung cấp cách thay đổi môi trường của chính nó, nhưng chỉ trong Initializationgiai đoạn:
$ 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 không phải là một giải pháp, nhưng đôi khi có thể được sử dụng. Bạn phải đính kèm nó vào các quy trình đang chạy của trình quản lý phiên (ví dụ gnome-session), trình quản lý cửa sổ (ví dụ gnome-shellhoặc openbox), thanh tác vụ / bảng điều khiển của bạn nếu có (ví dụ xfce4-panel) và nói chung là bất kỳ thứ gì khác có thể chạy công cụ. Đối với mỗi quy trình đó, bạn cần đính kèm gdbvới nó bằng PID, gọi putenv()hàm bằng cách sử dụng p, sau đó tách ra bằng cách sử dụng 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
Lưu ý rằng trình gỡ lỗi tạm dừng quá trình, do đó bạn phải đính kèm để chỉ kết hợp các trình quản lý cửa sổ từ một tty khác (bảng điều khiển ảo) hoặc qua SSH, nếu không màn hình sẽ bị đóng băng.
Ngoài ra, bạn cũng nên cập nhật môi trường được sử dụng bởi dbus-daemon:
$ dbus-update-activation-environment --systemd FOO=bar BAZ=qux
Đối với các hệ thống cũ:
$ 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, nếu định dạng tệp làkey=value.