답변:
.profile
vs. .zprofile
Zsh는 로그인 쉘로 호출 될 때가 ~/.zprofile
아닌을 실행 ~/.profile
합니다. 그 이유는 zsh에 표준 쉘과의 비 호환성이있어 스크립트를 깨뜨리기 때문입니다.
Zsh가 또는 ~/.profile
로 호출되면 실행 됩니다 . 그러나 로그인 할 때 zsh 프롬프트를 표시하는 것이 목표라면 도움이되지 않습니다.sh
ksh
당신은 할 수 있습니다 /bin/sh
로그인 쉘과 등 export SHELL=/bin/zsh
당신에 ~/.profile
. 그런 다음 터미널을 열면 터미널이 zsh를 시작합니다 (일부 터미널 에뮬레이터가 $SHELL
설정을 따르지 않는 경우 제외 ). 그러나 sh
ssh를 통해 로그인 할 때 여전히 있습니다 . exec zsh
마지막 에 포함하면이를 해결할 수 있습니다 ~/.profile
(이는 실행중인 쉘을 zsh로 대체 함) ~/.profile
. X 세션 시작과 같은 다른 스크립트에 포함 된 경우 가 아닌 대화식 로그인에 대해서만주의해야합니다. test는 다음에 의해 얻은 상위 프로세스의 이름입니다. 또는이 ps -o comm= $PPID
경우 안전합니다 ).sshd
su
exec
zsh 및 run과 함께 작동하는 가장 쉬운 솔루션 ~/.profile
은 다음을 실행 ~/.zprofile
하는 동안 sh 에뮬레이션 모드로 들어가는 것을 만드는 것 입니다 ~/.profile
.
emulate sh
. ~/.profile
emulate zsh
최근에 충분한 zsh가 있다면 (우분투에서 명료 한 이래로 의미합니다) 이것을로 단순화 할 수 있습니다 emulate sh -c '. ~/.profile'
.
.zprofile
vs. .zshrc
파일 ~/.profile
은 로그인 쉘에 의해로드됩니다 . 로그인 쉘은 텍스트 콘솔 또는 ssh를 통해 텍스트 모드로 로그인 할 때 시작되는 첫 번째 프로세스입니다. 기본적으로 대부분의 Linux 컴퓨터에서 로그인 셸은 bash이지만 chsh
명령 또는 Ubuntu의“사용자 설정”과 같은 다른 도구를 통해 로그인 셸을 변경할 수 있습니다 . 로그인 쉘인 경우 bash는 ~/.bash_profile
존재하고 및 ~/.profile
이면 zsh는 읽기만합니다 ~/.zprofile
(구문은 기존 sh와 완전히 호환되지 않기 때문에). 대부분의 구성 ~/.profile
에서 그래픽 디스플레이 관리자에 로그인 할 때 X 세션 시작 스크립트에 의해로드됩니다.
터미널 에뮬레이터를 시작하고 셸 프롬프트를 받거나 셸을 명시 적으로 시작하면 로그인 셸이 아닌 셸이 나타납니다. ~/.profile
(또는 ~/.zprofile
)는 로그인 할 때 실행하려는 명령을위한 것이므로 로그인하지 않은 쉘은이 파일을 읽지 않습니다. 대신 대화식 zsh를 시작하면이 표시 ~/.zshrc
됩니다. (Zsh ~/.zshrc
는 로그인 쉘이 아닌지 여부에 관계없이 모든 대화식 쉘에서 읽습니다 . 이상하게도 bash ~/.bashrc
는 로그인 쉘에서 읽지 않습니다 .)
일반적으로 ~/.profile
환경 변수 정의가 포함되며 로그인하거나 전체 세션에 대해 한 번 실행하려는 일부 프로그램을 시작할 수 있습니다. ~/.zshrc
별명 및 함수 정의, 쉘 옵션 설정, 완료 설정, 프롬프트 설정, 키 바인딩 등과 같은 모든 쉘 인스턴스에 대해 수행해야하는 작업이 포함되어 있습니다.
~/.profile
zsh
로그인 할 때로드되지 않습니다 .zsh
~/.zprofile
로그인시 로드합니다 .zsh
부하는 ~/.zshrc
새로운 터미널 세션을 시작할 때.더 많은 정보가 필요하십니까? Gilles의 훌륭한 답변을보십시오!
Gilles의 답변 외에도 합리적으로 최신 버전의 zsh를 사용하면 다음과 같이 할 수 있습니다.
[[ -e ~/.profile ]] && emulate sh -c 'source ~/.profile'
... zsh의 sh 모드로 .profile 파일을 소스로 제공합니다. 소스에서만 활성화됩니다. 따라서 소싱 후 다시 재생하기 위해 현재 옵션 상태를 저장할 필요가 없습니다.
zsh을의 I 손에있는 문서 만 언급 /etc/profile
하고 ~/.profile
있는 로그인 쉘에 대한 SH / KSH의 호환 모드.
% zsh --version
zsh 4.3.10 …
% cat ~/.profile
echo 'Running ~/.profile...'
기본 모드 로그인 쉘 (argv [0]로 시작 -
)은 사용하지 않습니다 ~/.profile
( ~/.zprofile
그렇지만 사용합니다 ).
% zsh -c 'exec -a -zsh zsh' </dev/null
(출력 없음)
SH / KSH의 호환성 모드 로그인 쉘의 .profile을 사용합니다 :
% zsh -c 'exec -a -sh zsh' </dev/null
Running ~/.profile...
% zsh -c 'exec -a -ksh zsh' </dev/null
Running ~/.profile...