Por que exportar não parece afetar os shells filhos?

1

se eu tiver

$ x='This is a String'
$ export x

$ xterm &
[3] 14089

O processo filho não parece responder a

$echo $x
$

Atualização: A PRIMEIRA vez que eu exporto a variável parece se estender por um processo? -

$ export xb
[1]+  Done                    xterm
durrantm.../durrantm$ export xb
durrantm.../durrantm$ 
# Note second export didn't say anything.
    
por Michael Durrant 07.08.2013 / 18:56

1 resposta

1

Você não pode exportar o ambiente dos pais para nenhum filho, uma vez que a criança tenha sido bifurcada. As crianças são búfalos bifurcados que, ao serem recolhidos, recebem uma cópia do ambiente dos pais naquele momento. Daquele ponto em diante eles estão por conta própria.

No seu caso, você está definindo as variáveis antes de bifurcar, então você deve ver as variáveis que foram definidas em qualquer criança. No entanto, parece que você está correndo em um erro de digitação. Experimente echo $x .

Exemplo

No shell pai:

$ x='This is a String'
$ export x
$ xterm &
[1] 28578

No xterm:

$ echo $x
This is a String

Variável sendo redefinida por arquivos de login?

Em alguns casos raros, você pode ter um set ou unset disperso, o que faria com que a variável de ambiente do pai não fosse transmitida corretamente para nenhum filho. Você pode verificar isso da seguinte maneira:

# login shell
$ bash -c -l 'echo $x'
This is a String

# interactive shell
$ bash -c -i 'echo $x'
This is a String

Você também pode usar a opção -x do Bash para que a saída acima seja mais detalhada.

$ bash -x -c -i 'echo $x'
    
por 07.08.2013 / 19:03