/etc/environment
é oficialmente o local correto para variáveis de ambiente em todo o sistema. Mas como posso recarregar as atribuições neste arquivo sem reiniciar ou registrar novamente?
Curiosamente, o Google não me ajuda aqui, além das dezenas de postagens do blog que sugerem usar
source /etc/environment
o que obviamente nunca funcionará, porque /etc/environment
é uma lista de atribuições (uma por linha) e não um script executável (daí os export
comandos ausentes em /etc/environment
...).
ubuntu
environment-variables
fgysin
fonte
fonte
for line in $( cat /etc/environment ) ; do export $line ; done
, se o formato do arquivo ékey=value
.export
...export
isso seria necessário ... (sem ela, é apenas uma variável normal não variável -Ambiente no shell atual, não disponível em processos filhos)Respostas:
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 - especificamentepam_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 comset -a
eset +a
. No entanto, ainda permanece um caminho ruim, pois o arquivo também não usa aspas. Mas isso deve funcionar bem:1 O GNOME Session Manager fornece uma maneira de mudar seu próprio ambiente, mas apenas durante a
Initialization
fase: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 exemplognome-session
), seu gerenciador de janelas (por exemplognome-shell
ouopenbox
), sua barra de tarefas / painel, se houver (por exemploxfce4-panel
) e, geralmente, qualquer outra coisa que possa executar coisas. Para cada um desses processos, você precisa anexargdb
a ele pelo PID, chamar aputenv()
função usando ep
, em seguida, desconectar usandoq
: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:
Para sistemas mais antigos:
fonte
while read
método lêstdin
, então você provavelmente deseja canalizar algo para ele (por exemplocat /etc/environment | while ...
). Mas isso não vai trabalhar com arquivos ambiente quote formatado (key="value"
)Isso não é tão abrangente quanto a resposta aceita, mas se você citou variáveis em seus
/etc/environment
arquivos, os dois métodos anteriores (que deexport $line
alguma forma usam ) darão errado e você terá valores citados.sed 's/^/export /' /etc/environment > /tmp/env.sh && source /tmp/env.sh
for
(obrigado @ tim-jones):for env in $( cat /etc/environment ); do export $(echo $env | sed -e 's/"//g'); done
fonte
sed 's/^/export /' /etc/environment
for env in $( cat /etc/environment ); do export $(echo $env | sed -e 's/"//g'); done
set -a; source /etc/environment; set +a;
.