Eu encontrei o pid do meu shell bash
$ echo $$
7791
Em seguida, verifico suas variáveis de ambiente de duas maneiras diferentes:
$ cat /proc/7791/environ | tr '\0' '\n'
dehttps://stackoverflow.com/a/532284/156458, e
$ env
No entanto, seus resultados não são idênticos. Por exemplo, eles mostram valores diferentes de PATH
. Por que eles diferem? Obrigado.
Responder1
Você deve ler os comentários abaixo dessa resposta enganosa.
/proc/$PID/environ
não é usado ao vivo pelo shell. Representa apenas o ambiente inicial do processo quando foi lançado.
Qualquer coisa feita no shell, incluindo seus scripts de inicialização, pode alterar esses valores dentro do shell sem alterar a proc
entrada que você está vendo.
Responder2
/proc/7791/environ
mostra o ambiente original do shell, conforme 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
. Este novo conjunto é então passado no vetor envp
quando o env
programa é iniciado.
Responder3
Seja qual for o problema que você está tentando resolver, você pode tentar usar
/proc/self
resolve isso. Em vez de obter o ambiente inicial do shell, um
cat /proc/self/environ
exibe o ambiente do cat
comando, que deve ser igual ao ambiente atual do shell em que ele é executado.