Respostas:
Quando você executa um programa, o programa filho herda suas variáveis de ambiente do pai. Por exemplo, se $HOME
estiver definido como /root
pai, a $HOME
variável da criança também será definida como /root
.
Isso se aplica apenas a variáveis de ambiente marcadas para exportação. Se você definir uma variável na linha de comando, como
$ FOO="bar"
Essa variável não será visível nos processos filho. A menos que você exporte:
$ export FOO
Você pode combinar essas duas instruções em uma única no bash (mas não no sh da velha escola):
$ export FOO="bar"
Aqui está um exemplo rápido, mostrando a diferença entre variáveis exportadas e não exportadas. Para entender o que está acontecendo, saiba que sh -c
cria um processo de shell filho que herda o ambiente do shell pai.
$ FOO=bar
$ sh -c 'echo $FOO'
$ export FOO
$ sh -c 'echo $FOO'
bar
Nota: Para obter ajuda sobre os comandos internos do shell, use help export
. Os built-ins do shell são comandos que fazem parte do seu shell, e não executáveis independentes, como /bin/ls
.
Unix
Os comandos env, set e printenv exibem todas as variáveis de ambiente e seus valores. env e set também são usados para definir variáveis de ambiente e geralmente são incorporados diretamente ao shell. printenv também pode ser usado para imprimir uma única variável, fornecendo esse nome de variável como o único argumento para o comando.
No Unix, os seguintes comandos também podem ser usados, mas geralmente dependem de um determinado shell.
export VARIABLE=value # for Bourne, bash, and related shells
setenv VARIABLE value # for csh and related shells
Você pode dar uma olhada nisso em
VARIABLE=value; export VARIABLE
vez de atribuir e exportar de uma só vez. O set
comando no C Shell é para variáveis de shell em vez de variáveis de ambiente; setenv
é a contraparte de export
. O set
comando nos shells derivados de Bourne imprime todas as variáveis, não apenas as variáveis exportadas (ambiente). Historicamente, pelo menos, o env
comando é separado do shell (não é um built-in), embora possa ser facilmente transformado em um built-in. Ele define o ambiente para um comando específico, não o shell que o executa.
export
é um comando bash
interno do shell e de outras variantes do shell Bourne . É usado para marcar uma variável de shell para exportar para processos filho.