답변:
일반적으로 PATH는 쉘에 의해 설정됩니다. Bash의 경우 모든 것이 매뉴얼에 설명되어 있습니다 . 부품 man bash
을 열고 건너 뛸 수도 있습니다 INVOCATION
.
대화식 로그인 쉘 또는 --login으로 호출
Bash가 대화식 로그인 쉘 또는 --login 옵션을 사용하는 비 대화식 쉘로 호출되면 파일이 존재하는 경우 먼저 / etc / profile 파일에서 명령을 읽고 실행합니다. 해당 파일을 읽은 후 ~ / .bash_profile, ~ / .bash_login 및 ~ / .profile을 순서대로 찾아서 존재하고 읽을 수있는 첫 번째 명령을 읽고 실행합니다.
대화 형 비 로그인 셸로 호출
로그인 쉘이 아닌 대화식 쉘이 시작되면 Bash는 ~ / .bashrc에서 해당 파일이 존재하는 경우 명령을 읽고 실행합니다. 또한 OS X
path_helper
에는 내용을 읽고/etc/paths.d
경로에 추가하는 내용이 있습니다.
여기서 핵심은 OS X에서 터미널이 기본적으로 로그인 쉘을 여는 반면 Linux에서는 쉘이 일반적으로 비 로그인 쉘로 시작된다는 것입니다. Josh Staiger는 로그인 대 비 로그인 쉘에 대한 좋은 설명을 제공 합니다.
따라서 경로를 설정할 수있는 기본적으로이 두 세 가지만 있습니다.
/etc/profile
(이 호출 path_helper
)/etc/paths
및 /etc/paths.d
(호출 path_helper
).bash_profile
)/etc/profile
대부분의 (모든? 100 % 확실) 쉘에 의해 사용된다. PATH와 같이 어디에서나 원하는 것을 배치하는 것이 좋은 선택입니다. Bash는 .bash_
파일을 읽는 반면 Zsh는 .zshrc
다른 파일 과 함께 읽습니다 . 껍질에 따라 다릅니다.
path_helper
되어 있지 대화 형 비 로그인 쉘 (도 (non-interactive) 형 모드 쉘) 요구했다. /etc/profile
실제로 대화식 로그인 쉘을 위해 호출됩니다 .
의 경로 /etc/paths
와는 /etc/paths.d/*
일반적으로에 추가 PATH
로 path_helper . path_helper
에서 /etc/profile
실행되므로 bash가 대화 형 로그인 쉘로 호출 될 때 실행되지만 bash가 비 로그인 쉘 또는 비 대화식 쉘로 호출 된 경우에는 실행되지 않습니다.
/etc/paths
포함 /usr/local/bin
기본적으로 마지막에, 그리고 /etc/paths.d/
기본적으로 비어 있습니다.
터미널 및 iTerm 2는 기본적으로 새 쉘을 로그인 쉘로 열고 컴퓨터에 ssh 할 때 열린 쉘도 로그인 쉘입니다. 다른 플랫폼의 많은 터미널 에뮬레이터 tmux
및 Emacs의 쉘 모드는 새 쉘을 비 로그인 쉘로 엽니 다.
이 줄을 /etc/launchd.conf
다음에 추가했습니다 .
setenv PATH ~/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/libexec:/usr/texbin
PATH
루트 실행 프로세스 의 값을 변경합니다 . 이 값은 사용자 별 실행 프로세스를 포함하여 다른 모든 프로세스에서 상속됩니다. /etc/launchd.conf
재시작하거나 launchctl < /etc/launchd.conf; sudo launchctl < /etc/launchd.conf
프로세스 를 실행 하고 다시 시작 하여 변경 사항을 적용 할 수 있습니다 .
OS X ~/.profile
에서 그래픽으로 로그인하면 읽을 수 없습니다. 두 경우 ~/.bash_profile
와 ~/.profile
존재, 배쉬는 읽지 않습니다 ~/.profile
중 하나.
~/.MacOSX/environment.plist
10.8에서 작동을 멈췄습니다.
/etc/profile
bash가 주로 사용하는 스크립트 라는 것을 의미 합니까? 다른 쉘에 대한 경험이 없지만 다른 구조를 따른다고 가정합니까?