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

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

내 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/environexecve 시스템 호출을 사용하여 프로세스가 시작될 때 프로세스가 수신한 대로 쉘의 원래 환경을 보여줍니다.

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

셸이 실행 중일 때 .bashrc. 이 새로운 세트는 프로그램이 시작될 envp때 벡터에 전달됩니다 .env

답변3

해결하려는 문제가 무엇이든 다음을 사용하여 시도해 볼 수 있습니다.

/proc/self

그것을 해결합니다. 쉘의 초기 환경을 얻는 대신,

cat /proc/self/environ

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

관련 정보