Referenciando variáveis ​​de ambiente * em * / etc / environment?

19

Descobri recentemente /etc/environment, que parece uma maneira mais padrão de configurar variáveis ​​de ambiente simples do que scripts, mas fiquei imaginando se havia uma maneira de fazer referência prévia de variáveis ​​de ambiente no arquivo / etc / environment.

Ou seja, eu tenho o seguinte:

JAVA_HOME="/tools/java"
GRAILS_HOME="/tools/grails"
GROOVY_HOME="/tools/groovy"
GRADLE_HOME="/tools/gradle"
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"

Se eu tentar adicionar $JAVA_HOME/binà definição PATH, no entanto, recebo $ JAVA_HOME / bin, e não a variável interpolada. Para remediar isso, estou criando o environment.sh no profile.d para adicionar as /binentradas ao caminho, mas isso parece desleixado e desorganizado.

Existe uma maneira de voltar a referenciar as variáveis ​​de ambiente em / etc / environment?

Stefan Kendall
fonte

Respostas:

13

O /etc/environmentarquivo é lido pelo pam_envmódulo PAM . Ele suporta apenas pares de valores-chave simples, sem substituição no lado direito.

Se você deseja criar o valor com substituições ou outras expansões de shell, precisará passar por um shell. /etc/profile(ou um arquivo /etc/profile.d) é o local certo para isso. Este é o lugar tradicional ( /etc/environmenté uma inovação relativamente recente, na história dos sistemas unix), e certamente não há nada de desleixado em usá-lo. O principal benefício /etc/environmentdisso é que ele permite que variáveis ​​de ambiente sejam definidas mesmo com métodos de login que não envolvam um shell ou para usuários que usam um shell não Bourne, mas isso não é comum na prática.

Gilles 'SO- parar de ser mau'
fonte
Sem substituição, você acaba com muitas redundâncias /etc/environment, recorri a /etc/profile, obrigado por sua sugestão.
SAFX
2

A documentação do Ubuntu faz isso parecer impossível. MAS, há uma resposta.

RESPOSTA : Crie variáveis ​​de ambiente persistentes em todo o sistema/etc/.bashrc

JAVA_HOME="/tools/java"
...
PATH="$JAVA_HOME:$PATH"  

Detalhes:
Aqui estão mais alguns detalhes da documentação de Variáveis ​​de ambiente .
A recomendação oficial é usar /etc/environment, como você tentou. O problema é que esse arquivo não é um arquivo de script. Em outras palavras, você não pode usar variáveis ​​em declarações de variáveis.

A documentação continua com outros 2 arquivos "Não recomendados"
/etc/profilee /etc/bash.bashrc.

/etc/profile"faz pouco mais do que invocar o arquivo /etc/bash.bashrc". Então escolha

/etc/bash.bashrc porque "O Ubuntu está configurado por padrão para executar este arquivo sempre que um usuário entra em um shell ou no ambiente de desktop".

csi
fonte
Atualizei as EnvironmentVariables em consulta com alguns desenvolvedores do Ubuntu, para que as declarações "não recomendadas" não existam mais.
Gunnar Hjalmarsson 29/11
"sempre que um usuário entra em um shell". o que devo fazer quando não houver usuário para inserir um shell? Preciso de variáveis ​​de ambiente para meus usuários automatizados que executam software na inicialização. Por exemplo, eu tenho 6 linhas de configuração de proxy sozinhas. O que eu deveria fazer com isso?
eis