Por que as duas maneiras de mostrar as variáveis de ambiente do shell atual diferem?

0

Eu encontrei o pid do meu shell bash

$ echo $$
7791

Eu então verifico suas variáveis de ambiente de duas formas diferentes:

$ cat /proc/7791/environ | tr '
$ env
' '\n'

de link , e

$ echo $$
7791

No entanto, suas saídas não são idênticas. Por exemplo, eles mostram valores diferentes de PATH . Por que eles diferem? Obrigado.

    
por Tim 23.05.2017 / 08:06

3 respostas

6

Você deve ler os comentários abaixo dessa resposta enganosa.

/proc/$PID/environ não é usado ao vivo pelo shell. Apenas representa o ambiente inicial do processo quando foi lançado.

Qualquer coisa feita no shell, incluindo seus scripts de inicialização, pode alterar esses valores de dentro do shell sem alterar a entrada proc que você está vendo.

    
por 23.05.2017 / 08:37
5

/proc/7791/environ mostra o ambiente original do shell, como foi recebido pelo processo quando foi iniciado usando a chamada de sistema execve:

 int execve(const char *filename, char *const argv[], char *const envp[]);

Quando o shell está em execução, ele pode alterar seu conjunto de variáveis exportadas, por exemplo, avaliando .bashrc . Esse novo conjunto é então passado no vetor envp quando o programa env é iniciado.

    
por 23.05.2017 / 08:41
1

Qualquer que seja o problema que você esteja tentando resolver, tente usar

/proc/self

resolve isso. Em vez de obter o ambiente inicial do shell, um

cat /proc/self/environ

exibe o ambiente do comando cat , que deve ser igual ao ambiente atual do shell no qual ele é executado.

    
por 23.05.2017 / 17:02