내 bash 쉘의 pid를 찾았습니다
$ echo $$
7791
그런 다음 두 가지 방법으로 환경 변수를 확인했습니다.
$ cat /proc/7791/environ | tr '\0' '\n'
~에서https://stackoverflow.com/a/532284/156458, 그리고
$ env
그러나 출력은 동일하지 않습니다. 예를 들어, 서로 다른 값을 표시합니다 PATH
. 왜 다른가요? 감사해요.
답변1
이 오해의 소지가 있는 답변에 대한 아래 설명을 읽어야 합니다.
/proc/$PID/environ
실시간으로 쉘에서 사용되지 않습니다. 프로세스가 시작될 때의 초기 환경만 나타냅니다.
초기화 스크립트를 포함하여 셸에서 수행되는 모든 작업은 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
명령을 실행하는 셸의 현재 환경과 동일해야 하는 명령 환경을 표시합니다 .