이것은 쉘의 PID입니다.
nathan@guixlaptop ~ $ $$
bash: 10984: command not found
환경 변수를 내보냅니다.
nathan@guixlaptop ~ $ export TESTVAR=test
쉘 환경에서 변수를 찾을 수 없습니다.
nathan@guixlaptop ~ $ cat /proc/10984/environ | grep TESTVAR || echo "fail"
fail
환경에 변수를 표시하는 방법은 무엇입니까?
답변1
/proc/.../environ
프로세스의 초기 환경을 포함합니다.:
이 파일에는 현재 실행 중인 프로그램이 시작될 때 설정된 초기 환경이 포함되어 있습니다.
execve(2)
....만약, 이후
execve(2)
, 프로세스는 환경을 수정합니다(예: 다음과 같은 호출을 통해).putenv(3)
또는 수정environ(7)
직접 변수) 파일에는 이러한 변경 사항이 반영되지 않습니다.
변경 사항을 보려면 새 셸을 시작해야 합니다.
$ TESTVAR=test bash
$ grep TESTVAR /proc/$$/environ
grep: /proc/1825425/environ: binary file matches
environ
침입적인 조치를 취하지 않으면 실행 중인 셸에 표시되는 내용을 변경할 수 없습니다 .프로세스 시작 후 /proc/PID/environ 변경더 알아보기.
답변2
NUL로 구분된 문자열을 처리한 다음 셸을 다시 시작하여 원하는 결과를 확인해야 한다고 생각합니다.
$ $$
bash: 9166: command not found
$ export TESTVAR=test_question
# at this point, you can check `/proc/9166/environ`, but `TESTVAR` won't show up until the shell is re-started
$ tr '\0' '\n' < /proc/9166/environ
SHELL=/bin/bash
NO_AT_BRIDGE=1
PWD=/home/pi
LOGNAME=pi
# ... etc, etc - the env var TESTVAR is not there...
$ tr '\0' '\n' < /proc/9166/environ | grep TESTVAR
$
# re-start bash & try again:
$ exec bash
$ tr '\0' '\n' < /proc/9166/environ | grep TESTVAR
TESTVAR=test_question
$
@aviro 및 @stephenkitt에 따른 단순화(댓글 참조)
답변3
strings
또 다른 예로 show proc/$$/environ 파일을 사용할 수 있습니다 .
strings /proc/$$/environ # $$ mean current process PID,
# strings process newline characters in file.
strings /proc/$$/environ | grep USER
export TESTVAR=123
env |grep TSETVAR # found
strings /proc/$$/environ | grep TESTVAR # not found
# new session
bash
strings /proc/$$/environ | grep TESTVAR # found