Respostas:
Este é um trecho da página de manual do Bash:
exportar [-fn] [nome [= palavra]] ...
exportar -p
Os nomes fornecidos são marcados para exportação automática para o ambiente de comandos executados posteriormente. Se a opção -f for fornecida, os nomes se referem às funções ...
Se você precisar apenas da variável no ambiente atual, não será necessário usar a exportação.
var=value
Editar:
Sem exportação: apenas ambiente atual. Com exportação: ambiente atual e ambientes filho.
Aqui está uma demonstração do efeito da exportação na disponibilidade de uma variável em um ambiente filho e que as mudanças no ambiente filho não afetam o pai:
$ var1=123
$ export var2=456
$ echo "parent [$var1] [$var2] [$var3]"
parent [123] [456] []
$ var3=789 bash -c 'echo "child [$var1] [$var2] [$var3]"; var1=111; var2=222; var3=333; echo "child [$var1] [$var2] [$var3]"'
child [] [456] [789]
child [111] [222] [333]
$ echo "parent [$var1] [$var2] [$var3]"
parent [123] [456] []
Após o primeiro eco ( echo "parent..."
), você vê "123" e "456" porque ambos var1
e var2
estão ativos no ambiente atual. Você não vê um valor para var3
porque ainda não está definido.
Após a linha que " var3=...
" inicia, você não vê um valor var1
porque não foi exportado. Você fazer ver um valor para o var2
porque ele foi exportado. Você vê um valor para var3
porque ele foi criado para o ambiente criança única .
( bash -c
é equivalente a executar um script com o conteúdo do argumento para a -c
opção. Um script ou outro executável ou, nesse caso, o argumento para bash -c
se tornar filho do ambiente atual que, como resultado, é claro, o filho da criança pai.)
No "script" os valores da variável são alterados. Agora ele gera esses novos valores.
Depois que o "script" é concluído, a execução retorna ao ambiente pai (a linha de comando neste caso). Após o último eco, você vê os valores originais porque as alterações feitas no ambiente filho não afetam o pai.
export
- disponibilizar variáveis para esses ambientes filho.
Você diz que
Estou sempre usando o comando export para definir a variável de ambiente
Pela maneira como você escreveu isso, parece que você está realmente tentando perguntar como você faz uma variável ambiental persistir. Para isso, é necessário que você coloque sua export VAR="foo"
declaração no arquivo $ HOME / .bash_profile (se estiver usando o bash). Se você deseja que essa variável ambiental persista para todos os usuários, exceto o root, adicione-a ao / etc / profile. Se você desejar que ele seja adicionado também ao usuário root, defina-o em /root/.bash_profile.
Isso funcionará para todos os shells de logon em que o bash é o shell de escolha. Para shells sem login, você precisa usar .bashrc. Não tenho idéias a oferecer para outras conchas: D
a exportação é a maneira mais direta de fazer isso, então por que não deixar por isso mesmo?
export VARIABLE=value # for Bourne, bash, and similar shells
setenv VARIABLE value # for csh and similar shells
FOO=BAR; executethisprogram
O programa executethisprogram
NÃO saberá o valor da variável FOO
. Por outro lado, ao usar: FOO=BAR; export FOO; executethisprogram
O programa executethisprogram
saberá o valor da variável FOO
.
export FOO
é um comando que marca a variável FOO
para que ela possa ser acessada por processos filhos do ambiente em que o comando foi emitido. Esse pai pode ser um script ou um shell interativo.
Você também pode fazer algo assim:
VAR=val application
Por exemplo:
LANG=C ls --help
saída em inglês.
LANG=pl_PL ls --help
saída em polonês (se disponível).
No passado, em sh, você não podia exportar VAL = val. Você tinha que
VAL=val; export VAL
ls
por exemplo) sem afetar o valor dessa variável no ambiente atual (pai).
ls
é um filho do processo a partir do qual foi executado. Se eu digitar ls
em um prompt de comando, o shell interativo é o pai e ls
o filho. Se eu tiver um script que use ls
, o script será o pai e ls
o filho.