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)?
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)?
Respostas:
export VAR=value
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.
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.
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"