Qual é a melhor maneira de definir uma variável de ambiente no .bashrc?

11

Ao configurar uma variável .bashrc, devo usar isso?

export VAR=value

Ou isso seria suficiente?

VAR=value

Qual é exatamente a diferença (se houver)?

Flávio Amieiro
fonte

Respostas:

16

A melhor maneira

export VAR=value

A diferença

Fazendo

VAR=value

define apenas a variável para a duração do script ( .bashrcneste caso). Os processos filhos (se houver) do script não terão o VAR definido e, assim que o script sair, ele VARse foi.

export VAR=value

adiciona explicitamente VARà lista de variáveis ​​que são passadas para processos filho. Quer experimentar? Abra um shell, faça

PS1="foo > "
bash --norc

O novo shell recebe o prompt padrão. Se você fizer algo como

export PS1="foo > "
bash --norc

o novo shell recebe o prompt que você acabou de definir.

Atualização: como Ian Kelling observa abaixo, as variáveis ​​definidas em .bashrcpersistem no shell que originou .bashrc. Geralmente, sempre que o shell origina um script (usando o source scriptnamecomando), as variáveis ​​definidas no script persistem por toda a vida útil do shell.

agnul
fonte
1
"apenas define a variável para a duração do script (neste caso, .bashrc)" "Isso é falso / enganoso. As variáveis ​​definidas dessa maneira persistem no shell interativo que lê .bashrc.
Ian Kelling #
PS1é um mau exemplo de uma variável a ser exportada como uma variável de ambiente. É significativo apenas para processos filhos que são shells e é interpretado de maneira diferente por shells diferentes (por exemplo, bash e dash). A melhor prática é simplesmente configurá-lo como uma variável comum do shell no .bashrc. Melhores exemplos de variáveis de ambiente incluem HOME, PATH, EDITOR, etc.
Anthony Geoghegan
10

Ambos parecem funcionar bem, mas o uso de exportação garantirá que a variável esteja disponível para subshells e outros programas. Para testar isso, tente isso.

Adicione essas duas linhas ao seu arquivo .bashrc

TESTVAR="no export"
export MYTESTVAR="with export"

Em seguida, abra um novo shell.

Em execução echo $TESTVARe echo $MYTESTVARmostrará o conteúdo de cada variável. Agora, dentro desse mesmo shell, remova essas duas linhas do arquivo .bashrc e execute bashpara iniciar um subshell.

A execução echo $TESTVARterá uma saída vazia, mas a execução echo $MYTESTVARexibirá "com exportação"

Mike H
fonte