Li aqui que o objetivo de export
um shell é disponibilizar a variável para subprocessos iniciados no shell.
No entanto, também li aqui e aqui que "os processos herdam o ambiente do pai (o processo que os iniciou)".
Se for esse o caso, por que precisamos export
? o que estou perdendo?
As variáveis de shell não fazem parte do ambiente por padrão? Qual é a diferença?
shell
process
environment-variables
Amelio Vazquez-Reina
fonte
fonte
set -k
é para que você possa usarcmd ENVVAR=value
no lugar deENVVAR=value cmd
, que não funcionará no seu exemplo, a menos que tenhaset -k
sido executado antes da chamadaf
. Além disso, poucas conchas o suportam atualmente e apenas para compatibilidade com o shell Bourne. No shell Bourne (ou Korn), isso não funcionaria para funções. E porque afeta a análise de shell, ele deve estar em vigor no momento em que o shell lê o código que o utiliza lá.set -a
Há uma diferença entre variáveis de shell e variáveis de ambiente. Se você definir uma variável de shell sem
export
incluí-la, ela não será incluída no ambiente de processos e, portanto, não será herdada de seus filhos.Usando
export
você diz ao shell para adicionar a variável shell ao ambiente. Você pode testar isso usandoprintenv
(que apenas imprime seu ambientestdout
, já que é um processo filho no qual você vê o efeito dasexport
variáveis):fonte
Uma variável, uma vez exportada, faz parte do ambiente.
PATH
é exportado no próprio shell, enquanto variáveis personalizadas podem ser exportadas conforme necessário. Usando algum código de configuração:Comparar
Com
Como
foo
não é exportado pelo shell etest2.sh
nunca exportado, ele não fazia parte do ambiente dasubshell.sh
última execução.fonte