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 ( .bashrc
neste caso). Os processos filhos (se houver) do script não terão o VAR definido e, assim que o script sair, ele VAR
se 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 .bashrc
persistem no shell que originou .bashrc
. Geralmente, sempre que o shell origina um script (usando o source scriptname
comando), 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 $TESTVAR
e echo $MYTESTVAR
mostrará o conteúdo de cada variável. Agora, dentro desse mesmo shell, remova essas duas linhas do arquivo .bashrc e execute bash
para iniciar um subshell.
A execução echo $TESTVAR
terá uma saída vazia, mas a execução echo $MYTESTVAR
exibirá "com exportação"