Uma coisa que você está enganado é que /etc/environment
requer uma reinicialização para recarregar. Isto está incorreto. A única vez que o arquivo é lido é no logon , quando a pilha PAM é ativada - especificamente pam_env.so
, que lê o arquivo.
Sair e voltar a aplicar as alterações - e, de fato, você deve fazer isso se desejar que todos os seus processos recebam o novo ambiente . Todas as outras "soluções" 2 aplicarão o ambiente apenas ao processo de shell único, mas não a qualquer coisa iniciada por meio da GUI, incluindo novas janelas de terminal. 1
Se você está bem com isso, porém - a falta de export
comandos pode ser compensada com set -a
e set +a
. No entanto, ainda permanece um caminho ruim, pois o arquivo também não usa aspas. Mas isso deve funcionar bem:
while read -r env; do export "$env"; done
1 O GNOME Session Manager fornece uma maneira de mudar seu próprio ambiente, mas apenas durante a Initialization
fase:
$ 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
não é uma solução, mas pode ser usado algumas vezes. Você precisa anexá-lo aos processos em execução do seu gerenciador de sessões (por exemplo gnome-session
), seu gerenciador de janelas (por exemplo gnome-shell
ou openbox
), sua barra de tarefas / painel, se houver (por exemplo xfce4-panel
) e, geralmente, qualquer outra coisa que possa executar coisas. Para cada um desses processos, você precisa anexar gdb
a ele pelo PID, chamar a putenv()
função usando e p
, em seguida, desconectar usando 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
Observe que o depurador interrompe o processo; portanto, você deve se conectar aos gerenciadores de janelas de composição apenas de outro tty (console virtual) ou sobre SSH; caso contrário, a tela congelaria.
Além disso, você também deve atualizar o ambiente usado pelo dbus-daemon:
$ dbus-update-activation-environment --systemd FOO=bar BAZ=qux
Para sistemas mais antigos:
$ 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
, se o formato do arquivo ékey=value
.