내 bash 쉘에 다음과 같은 환경 변수가 있다고 가정해 보겠습니다.
export a="Hello World"
bash 쉘에서 프로세스를 실행하면 a
하위 프로세스가 환경 변수를 상속받습니다.
내 질문은 다음과 같습니다. a
하위 프로세스에서 환경 변수 또는 쉘 변수로 상속됩니까? 즉, a
하위 프로세스에서 내보낼 것입니까?
답변1
환경 변수로.
이는 하위 프로세스에 의해 시작된 모든 하위 프로세스도 이 변수를 상속한다는 의미입니다.
시험:
$ export FOO=bar
$ sh
$ sh
$ sh
$ echo "$FOO"
bar
$ exit
$ exit
$ exit
위에서 환경 변수를 생성하는 셸은 FOO
새로운 대화형 셸을 시작합니다. 그것은 또 다른 일을 시작했고, 또 다른 일을 시작했습니다. 이 증손자의 껍질에는 $FOO
가치가 있습니다 bar
.
또 다른 테스트에서는 하위 쉘이 환경 변수를 변경하면 변경 사항이 후속 하위 쉘로 전달되지만 상위 쉘로는 전달되지 않는 것으로 나타났습니다.
$ export FOO=bar
$ ( ( echo "$FOO"; FOO=quux; ( ( ( echo "$FOO" ) ) ) ) )
bar
quux
$ echo "$FOO"
bar
FOO
(이 예에서는 서브쉘도 쉘 변수를 상속하므로 내보내기는 중요하지 않습니다. 그러나 각각이 완전히 별도의 프로세스인 경우 ( ... )
효과는 동일합니다.)( ... )
환경 변수는 다음에 대해 사용할 수 있습니다.어느프로세스는 쉘 스크립트가 아닌 쉘에서 시작됩니다. C 프로그램이나 스크립트가 이를 쉘 변수로 상속하는 것은 의미가 없습니다. awk
이러한 언어에는 그러한 변수에 대한 개념이 없기 때문입니다(환경 변수는 엄격하게 키-값 쌍이지만 쉘 변수는 정수로 입력할 수 있습니다). , 읽기 전용, 배열, 연관 배열 등(셸의 기능에 따라 다름).
답변2
/proc/PID/environ에서 프로세스 환경 변수를 읽을 수 있습니다. 따라서 변수를 내보낼 때 이 /proc "파일"에 선언됩니다.