Sua suposição é que as variáveis do shell são no ambiente . Isso está incorreto. O comando export
é o que define um nome para estar no ambiente. Assim:
a=1 b=2
export b
resulta no shell atual sabendo que $a
se expande para 1 e $b
para 2, mas os subprocessos não sabem nada sobre a
porque não faz parte do ambiente (mesmo no shell atual).
Algumas ferramentas úteis:
-
set
: Útil para visualizar os parâmetros atuais do shell, exportados ou não -
set -k
: define argumentos atribuídos no ambiente. Consideref() { set -k; env; }; f a=1
-
set -a
: Informa ao shell para colocar qualquer nome que seja definido no ambiente. Como colocarexport
antes de cada tarefa. Útil para arquivos.env
, como emset -a; . .env; set +a
. -
export
: Diz ao shell para colocar um nome no ambiente. Exportação e atribuição são duas operações totalmente diferentes. -
env
: Como um comando externo,env
só pode informar sobre o ambiente herdado , portanto, é útil para verificação de integridade. -
env -i
: útil para limpar o ambiente antes de iniciar um subprocesso.
Alternativas para export
:
-
name=val command
# Atribuição antes de o comando exportar esse nome para o comando. -
declare/local -x name
# Exporta nome, particularmente útil em funções de shell quando você deseja evitar a exposição do nome ao escopo externo. -
set -a
# Exporta todas as atribuições a seguir.