Respostas:
A /etc/environment
atualização funcionará apenas na próxima sessão, não será recarregada automaticamente.
O que significa que você não pode alterá-lo para sessões que já foram iniciadas para outros usuários.
Se você deseja "recarregar" o que estiver no /etc/environment
arquivo, precisará do seguinte comando:
source /etc/environment
Mas, novamente, ele funcionará apenas para sua própria sessão atual; outros usuários não serão afetados até que iniciem uma nova sessão ou executem o comando acima em sua própria sessão.
Esses arquivos de configuração, sejam globais ( /etc/environment
, /etc/profile
) ou específicos do usuário ( ~/.profile
, ~/.bashrc
) , são processados apenas no próximo login / sessão.
Os arquivos globais se aplicam a todos os usuários (não apenas à raiz) ... mas você precisa reiniciar sua sessão de login para ver as mudanças refletidas no ambiente. Isso pode acontecer ligando su
como você observou ... ou desconectando / iniciando ou reiniciando. Você poderia su
para um usuário não root e veria que eles também têm alterações no ambiente.
A razão pela qual você precisa reiniciar ou fazer login novamente para obter o ambiente global é porque o ambiente é herdado dos processos-pai e o processo raiz de tudo o que você executa é o seu shell de login ... portanto, se o seu shell de login não tiver o ambiente ... os processos também não foram iniciados no shell de login. É claro que você pode definir / atualizar o ambiente para processos individuais à medida que os inicia, mas seria necessário definir o ambiente para o shell de login e reiniciar todos os subprocessos para que eles vissem a alteração.
Como alguém referiu, você precisa de um reboot ou o logout / login para as alterações /etc/profile
, /etc/profile.d/*.sh
e /etc/environment
para ser apanhada.
Isso ocorre porque, embora esses arquivos especifiquem o ambiente global ... eles são executados apenas uma vez no logon e, portanto, os logins / sessões existentes não refletirão alterações nesses arquivos. Uma reinicialização "redefine" o logon de todos, forçando-os a buscar o novo ambiente.
Na sua própria sessão de logon, você pode source /etc/profile
, a fim de capturar as alterações sem uma reinicialização ou logout / logon ... mas isso afetará apenas sua própria sessão e os novos processos em execução na sua sessão.
Observe também que não há interpolação de variáveis /etc/environment
(não é um script); portanto, você não pode fazer coisas como essa PATH="$PATH:/my/custom/path"
.
Observe também que /etc/profile
e /etc/profile.d/*.sh
são executados apenas para sessões de login e, portanto, o ambiente configurado não estará disponível para as contas de não login do sistema (ou seja, se você estiver tentando definir uma variável de ambiente para um processo daemon que é executado fora do seu shell de login).
Nota que bashrc
não é útil para definir o ambiente para todo o shell de login, mas para os reservatórios festança e processos sub ... então para a verdadeira "global" ou "user global" você provavelmente vai querer colocar o seu ambiente config na /etc/profile
ou /etc/profile.d/my-custom-env.sh
ou ~/.profile
. Outros shells (por exemplo, zsh) têm seus próprios arquivos de configuração e, portanto, a configuração de ambiente não específico do bash em um bashrc causará problemas ou confusão se / quando você trocar de shells (ou tiver outros usuários no sistema usando shells diferentes).
É um problema comum instalar um novo programa e precisa especificar algum ambiente para que ele funcione corretamente. O ambiente global é uma resposta, mas geralmente exige uma reinicialização que não é ideal para servidores e casos de uso de provisionamento / configuração automática. Você deve se perguntar se essa é realmente uma variável que todos os usuários e programas no sistema precisam ou se é realmente apenas algo que você precisa disponibilizar para um usuário ou programa específico.
observe a inclusão do ambiente no perfil ou no bashrc no diretório inicial do usuário (por exemplo ~/.profile
~/.bashrc
), dependendo se você deseja isso para interativo, shells de login, somente bash, etc.
Lembre-se de que isso também requer uma reinicialização ou logout / logon para que as alterações no ambiente estejam disponíveis para todos os processos na sessão de logon do usuário. O usuário pode source ~/.profile
... mas isso é feito em um terminal e atualiza apenas o ambiente nessa sessão do terminal e nos processos filho ... não necessariamente para todo o ambiente de login do usuário.
Um é apenas fornecer o ambiente ao executar o comando:
VAR_NAME="VAR VALUE" VAR2_NAME="VAR2_VALUE" /path/to/program --opt1 --op2
Se você estiver usando systemd você também pode especificar o ambiente no arquivo unidade / serviço sob [Service]
comEnvironment=VAR_NAME="VAR VALUE" VAR2_NAME="VAR2_VALUE
Essa opção pode parecer desajeitada porque você precisa especificar o ambiente toda vez que executa um programa, mas se o ambiente for realmente necessário apenas por esse programa ... essa é realmente a melhor maneira e você deve se acostumar e não despejar tudo em um arquivo bashrc ou de perfil.
Se você não estiver usando systemd ou init para configurar o ambiente e executar o programa ... é claro que também pode envolver a execução do programa com um script bash, onde salva o comando completo, incluindo a configuração do ambiente por conveniência.
Também há uma resposta muito detalhada aqui que sugiro que você leia: /ubuntu//a/247769/824160
crie um script de shell customizado em
/etc/profile.d/
adicione suas variáveis de ambiente global dentro do script criado, reinicie a máquina e ela estará disponível para todos.
A adição de uma variável para /etc/environment
funcionou para mim.
No entanto, tive que reiniciar após a alteração /etc/environment
para que a alteração entre em vigor. Simplesmente fechar e reabrir a janela do terminal não era suficiente.
source /etc/environment
para recarregá-lo.