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

18

Recentemente, descobri /etc/environment , que parece uma maneira mais padrão de configurar variáveis ​​de ambiente simples do que scripts, mas fiquei me perguntando se havia uma maneira de referenciar variáveis ​​de ambiente no arquivo / etc / environment.

Ou seja, eu tenho isto:

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 environment.sh no profile.d para adicionar as entradas /bin ao caminho, mas isso parece desleixado e desorganizado.

Existe uma maneira de retroceder as variáveis ​​de ambiente em / etc / environment?

    
por Stefan Kendall 13.11.2011 / 17:38

2 respostas

12

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

Se você quer construir o valor com substituições ou outras expansões de shell, você precisa passar por um shell. /etc/profile (ou um arquivo em /etc/profile.d ) é o lugar 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 de /etc/environment é que ele permite que variáveis ​​de ambiente sejam configuradas mesmo com métodos de login que não envolvem um shell ou para usuários que usam um shell não Bourne, mas eles não são comuns na prática.

    
por Gilles 13.11.2011 / 18:10
2

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

ANSWER : cria variáveis ​​de ambiente persistentes no sistema em /etc/.bashrc

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

Detalhes:
Aqui estão mais alguns detalhes da documentação das Variáveis ​​de Ambiente .
A recomendação oficial é usar /etc/environment , como você tentou. O problema é que este 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 dois arquivos "Não recomendados" em /etc/profile e /etc/bash.bashrc .

/etc/profile "faz pouco mais que invocar o arquivo /etc/bash.bashrc". Então, ao invés disso, escolha

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

    
por csi 02.12.2013 / 16:59