현재 쉘 환경 변수를 표시하는 다음 두 가지 방법이 다른 이유는 무엇입니까?

현재 쉘 환경 변수를 표시하는 다음 두 가지 방법이 다른 이유는 무엇입니까?

내 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/environexecve 시스템 호출을 사용하여 프로세스를 시작할 때 수신된 쉘의 원래 환경을 표시합니다.

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

쉘이 실행 중일 때 내보낸 변수 세트를 변경할 수 있습니다(예: 계산 ) .bashrc. 그러면 이 새 세트는 프로그램이 시작될 때 벡터로 전달됩니다 envp.env

답변3

해결하고 싶은 문제가 무엇이든 다음을 사용해 볼 수 있습니다.

/proc/self

그것을 고치십시오. 쉘의 초기 환경을 얻는 대신,

cat /proc/self/environ

cat명령을 실행하는 셸의 현재 환경과 동일해야 하는 명령 환경을 표시합니다 .

관련 정보