As variáveis de ambiente herdadas serão herdadas como variáveis de ambiente ou como variáveis de shell?

1

Digamos que meu shell bash tenha a seguinte variável de ambiente:

export a="Hello World"

Se eu executar um processo a partir do shell bash, a variável de ambiente a será herdada por este processo filho.

Minha pergunta é: a será herdada pelo processo filho como uma variável de ambiente ou como uma variável shell, ou seja, a no processo filho será exportado?

    
por user7681202 24.09.2017 / 21:53

2 respostas

3

Como uma variável de ambiente.

Isso significa que qualquer processo filho iniciado pelo processo filho herdará a variável também.

Teste:

$ export FOO=bar
$ sh
$ sh
$ sh
$ echo "$FOO"
bar
$ exit
$ exit
$ exit

Acima, o shell que criou a variável de ambiente FOO iniciou um novo shell interativo. Isso começou outro, e aquele começou outro. Dentro desse shell de bisneto, $FOO tem o valor bar .

Outro teste mostrando que, se uma subshell muda a variável de ambiente, a mudança é transportada para subshells posteriores (mas não é propagada para os shells-pai):

$ export FOO=bar
$ ( ( echo "$FOO"; FOO=quux; ( ( ( echo "$FOO" ) ) ) ) )
bar
quux
$ echo "$FOO"
bar

(neste exemplo, não importa que FOO seja exportado como ( ... ) subshells também herdam variáveis shell, mas o efeito teria sido o mesmo se cada ( ... ) tivesse sido um processo totalmente separado)

Note que as variáveis de ambiente estão disponíveis para qualquer qualquer processo iniciado a partir do shell, não apenas scripts de shell. Não faria sentido que um programa em C ou awk os herdas como variáveis de shell, pois não há nenhum conceito desses tipos de variáveis nessas linguagens (variáveis de ambiente são pares estritamente chave-valor, enquanto variáveis shell podem ser digitadas como inteiros, somente leitura, matrizes, matrizes associativas, etc., dependendo das capacidades do shell).

    
por 24.09.2017 / 22:04
0

Você pode ler suas variáveis ambientais de processo em / proc / PID / environ. Então, quando você exportar variável, é indicado neste / proc "arquivo".

    
por 24.09.2017 / 22:09