쉘은 환경 변수를 어떻게/어디에 저장합니까?

쉘은 환경 변수를 어떻게/어디에 저장합니까?

$PWD, $PATH, $USERNAME 등이 있습니다. 저는 자체 쉘을 개발해 왔으며 오늘 환경 변수를 도입했습니다. 내가 수행하는 방법은 pwd, path 등이라는 문자열을 생성하는 것입니다. 따라서 $PWD와 같은 명령이 에코되면 pwd를 인쇄하도록 지시합니다. 이것이 bash와 같은 것입니까? 아직 환경 변수를 설정할 수 있는 조항은 없지만 이에 대해 작업해 보겠습니다. 내 주요 질문은 실제 쉘이 어디에 있고 이를 수행하는 방법입니다.

다소 관련된 또 다른 질문은 printenv가 이 모든 것과 무슨 관련이 있습니까? printenv는 바이너리이고 현재 실행 중인 셸 대신 항상 bash 환경 변수를 인쇄하기 때문에(분명히 경로와 비밀번호로 설정한 프로그램에서 문자열을 어떻게 감지합니까?) 다음으로 시작합니다. 이거 가져?

답변1

쉘은 원하는 방식으로 환경 변수를 저장할 수 있습니다. 이것은 실제로 관련이 없습니다. 관련된 것은 쉘이 printenv시스템 호출을 통해 환경을 하위 프로세스(포함)에 전달할 수 있어야 한다는 것입니다 execve.

답변2

바라보다남자 7 환경. 쉘이 다른 프로세스를 실행할 때 - 어떤 방법으로든구현하다(3) - 프로세스는 이전 프로세스의 환경을 상속받습니다. 편리한 쉘 설계는 내보낸 쉘 변수와 내보내지 않은 쉘 변수라는 두 개의 목록을 유지하는 것입니다. 내보낸 항목은 쉘 자체 환경에서 유지 관리될 수 있습니다.푸텐프(3) 쉘에 의해 생성된 모든 프로세스에 의해 자동으로 상속됩니다. 내보내지지 않은 항목은 셸에서만 액세스할 수 있는 별도의 목록에 있을 수 있습니다.

이런 종류의 것에 관심이 있다면 찾을 수 있을 것입니다.리눅스 프로그래밍 인터페이스Michael Kerrisk의 유용한 참고자료입니다.

관련 정보