
내 bash 쉘의 pid를 찾았습니다
$ echo $$
7791
그런 다음 두 가지 방법으로 환경 변수를 확인합니다.
$ cat /proc/7791/environ | tr '\0' '\n'
~에서https://stackoverflow.com/a/532284/156458, 그리고
$ env
그러나 출력은 동일하지 않습니다. 예를 들어, 서로 다른 값을 표시합니다 PATH
. 왜 다른가요? 감사해요.
답변1
오해의 소지가 있는 답변 아래의 설명을 읽어야 합니다.
/proc/$PID/environ
쉘에서는 라이브로 사용되지 않습니다. 이는 프로세스가 시작되었을 때 프로세스의 초기 환경을 나타낼 뿐입니다.
init 스크립트를 포함하여 셸에서 수행되는 모든 작업은 현재 proc
보고 있는 항목을 변경하지 않고도 셸 내에서 해당 값을 변경할 수 있습니다.
답변2
/proc/7791/environ
execve 시스템 호출을 사용하여 프로세스가 시작될 때 프로세스가 수신한 대로 쉘의 원래 환경을 보여줍니다.
int execve(const char *filename, char *const argv[], char *const envp[]);
셸이 실행 중일 때 .bashrc
. 이 새로운 세트는 프로그램이 시작될 envp
때 벡터에 전달됩니다 .env
답변3
해결하려는 문제가 무엇이든 다음을 사용하여 시도해 볼 수 있습니다.
/proc/self
그것을 해결합니다. 쉘의 초기 환경을 얻는 대신,
cat /proc/self/environ
cat
명령이 실행되는 셸의 현재 환경과 동일해야 하는 명령 환경을 표시합니다 .