O que a exportação faz no BASH? [duplicado]

66

É difícil admitir, mas eu nunca entendi exatamente o que exatamente export faz com uma variável de ambiente. Eu sei que se eu não exportar uma variável, às vezes não posso vê-la em processos filhos, mas às vezes parece que eu posso. O que realmente está acontecendo quando digo

export foo=5

e quando não devo exportar uma variável?

    
por Chas. Owens 16.06.2010 / 22:02

3 respostas

14

De man bash :

ENVIRONMENT

When a program is invoked it is given an array of strings called the environment. This is a list of name-value pairs, of the form name=value.

The shell provides several ways to manipulate the environment. On invocation, the shell scans its own environment and creates a parameter for each name found, automatically marking it for export to child processes. Executed commands inherit the environment. The export and declare -x commands allow parameters and functions to be added to and deleted from the environment. If the value of a parameter in the environment is modified, the new value becomes part of the environment, replacing the old. The environment inherited by any executed command consists of the shell's initial environment, whose values may be modified in the shell, less any pairs removed by the unset command, plus any additions via the export and declare -x commands.

    
por 16.06.2010 / 22:09
85

Variáveis exportadas são passadas para processos filhos, variáveis não exportadas não.

    
por 16.06.2010 / 22:08
19

Quando você usa export , você está adicionando a variável à lista de variáveis de ambiente do shell no qual o comando de exportação foi chamado e todas as variáveis de ambiente de um shell são passadas para os processos filhos, é por isso que você pode usar isso.

Quando você finaliza o shell, seu ambiente é destruído, é por isso que as variáveis de ambiente são declaradas e exportadas no login, no arquivo .bashrc, por exemplo

    
por 17.06.2010 / 00:21