$PATH는 (osx)에서 값을 어디서 얻나요?

$PATH는 (osx)에서 값을 어디서 얻나요?

$PATH를 입력하면 값 목록에 Python 프레임워크 의 일부 /etc/paths와 이에 대한 링크도 표시됩니다. /etc/paths.d이것들은 어디서 읽혀지나요?

답변1

컴퓨터에 로그인하면 loginwindow.app이 $HOME, $SHELL, $TMPDIR, 및 를 $LOGNAME포함 하는 기본 환경을 설정합니다 . 데몬이나 에이전트를 시작하여 환경을 변경할 수도 있습니다. 또는 확장을 통해 일반적으로 PATH 변수는 커널에서 하드 코딩된 PATH 변수로 설정됩니다.$USER$PATHlaunchd

sysctl user.cs_path
user.cs_path: /usr/bin:/bin:/usr/sbin:/sbin

터미널 에뮬레이터를 시작하면 기본적으로 호출됩니다 login. login -pf <yourname>아직 설정되지 않은 환경 변수만 설정됩니다(참고자료 참조 man login).

그런 다음 쉘은 $SHELL호출에서 해당 파일을 읽습니다. 설정된 PATH 변수를 가져오고, 읽고, 현재 PATH에서 중복 항목을 제거하고, PATH 변수를 설정된 대로 정렬한 다음, 그 안에 있는 파일을 읽고, 해당 파일을 PATH 변수에 추가한 다음, 원래 PATH에 임의의 경로를 추가하세요. 추가되지 않은 ../etcpath_helperpath_helper/etc/paths/etc/paths/etc/paths.d

마지막으로 $SHELL은 홈 디렉토리에 있는 로그인 쉘에 해당하는 rc 파일을 읽습니다.

답변2

기본적으로 호출된 프로그램은 path_helper다양한 쉘 rc 파일에서 /etc/*실행 됩니다.

$ grep path_helper /etc/* 2>/dev/null
/etc/csh.login:#if ( -x /usr/libexec/path_helper ) then
/etc/csh.login:#    eval `/usr/libexec/path_helper -c`
/etc/profile:#if [ -x /usr/libexec/path_helper ]; then
/etc/profile:#  eval `/usr/libexec/path_helper -s`
/etc/zprofile:#if [ -x /usr/libexec/path_helper ]; then
/etc/zprofile:# eval `/usr/libexec/path_helper -s`
$ 

이것은 분명히아니요기본값은 비활성화 path_helper하고 PATH내 rc 파일에서 관리했습니다.

관련 정보