
방금 Ubuntu 시스템에 zsh를 설치했습니다. zsh가 init에서 ~/.profile을 실행하지 않는 것 같습니다. 제가 이해한 바에 따르면 이는 자동으로 수행되어야 합니다. 내가 무엇을 놓치고 있나요?
답변1
.profile
대.zprofile
Zsh는 로그인 쉘로 호출될 때 실행 ~/.zprofile
되지 않고 실행됩니다. ~/.profile
그 이유는 zsh가 스크립트를 깨뜨릴 만큼 표준 쉘과 충분히 비호환성이 있기 때문입니다.
Zsh는 or ~/.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로 작업하고 실행하는 가장 쉬운 솔루션은 실행되는 동안 sh 에뮬레이션 모드로 들어가는 를 ~/.profile
만드는 것입니다 .~/.zprofile
~/.profile
emulate sh
. ~/.profile
emulate zsh
최근에 충분한 zsh를 가지고 있다면(Ubuntu에서는 lucid를 의미한다고 생각합니다) 이를 emulate sh -c '. ~/.profile'
.
.zprofile
대.zshrc
파일은 ~/.profile
다음에 의해 로드됩니다.로그인껍질. 로그인 쉘은 텍스트 콘솔이나 SSH를 통해 텍스트 모드로 로그인할 때 시작되는 첫 번째 프로세스입니다. 기본적으로 대부분의 Linux 시스템에서 로그인 셸은 bash이지만 chsh
명령을 사용하거나 Ubuntu의 "사용자 설정"과 같은 다른 도구를 통해 변경할 수 있습니다 . 로그인 셸인 경우 bash는 ~/.bash_profile
and 가 있으면 읽는 ~/.profile
반면, zsh는 읽기만 합니다 ~/.zprofile
(구문이 기존 sh와 완전히 호환되지 않기 때문). 대부분의 구성에서는 ~/.profile
그래픽 디스플레이 관리자에 로그인할 때 X 세션 시작 스크립트에 의해서도 로드됩니다.
터미널 에뮬레이터를 시작하고 쉘 프롬프트가 표시되거나 쉘을 명시적으로 시작하면 로그인 쉘이 아닌 쉘이 표시됩니다. ~/.profile
(또는 ~/.zprofile
)은 로그인할 때 실행하려는 명령이므로 로그인이 아닌 쉘에서는 이 파일을 읽지 않습니다 . 대신 대화형 zsh를 시작하면 ~/.zshrc
. (Zsh는 ~/.zshrc
로그인 쉘이든 아니든 모든 대화형 쉘에서 읽습니다. bash는 이상하게도 ~/.bashrc
로그인 쉘에서 읽지 않습니다.)
일반적으로 ~/.profile
환경 변수 정의가 포함되어 있으며 로그인할 때 또는 전체 세션 동안 한 번 실행하려는 일부 프로그램을 시작할 수 있습니다. ~/.zshrc
별칭 및 함수 정의, 셸 옵션 설정, 완성 설정, 프롬프트 설정, 키 바인딩 등과 같이 모든 셸 인스턴스에 대해 수행해야 하는 작업이 포함되어 있습니다.
답변2
참을성이 없는 사람들을 위한 짧은 대답:
~/.profile
zsh
로그인 시 로드되지 않습니다 .zsh
~/.zprofile
로그인 시 로드됩니다 .zsh
~/.zshrc
새 터미널 세션을 시작할 때 로드됩니다 .
더 많은 정보가 필요하세요? Gilles의 훌륭한 답변을보십시오!
답변3
Gilles의 답변 외에도 최신 버전의 zsh를 사용하면 다음을 수행할 수 있습니다.
[[ -e ~/.profile ]] && emulate sh -c 'source ~/.profile'
...zsh의 sh-mode가 적용된 .profile 파일을 소스로 사용합니다. 그리고 소스 중에만 활성화됩니다. 따라서 소싱 후 다시 재생하기 위해 현재 옵션 상태를 저장할 필요가 없습니다.
답변4
그만큼zsh내가 가지고 있는 문서 에는 로그인 쉘에 대해서만 /etc/profile
언급 되어 있습니다.~/.profile
쉿/크쉬호환 모드.
% zsh --version
zsh 4.3.10 …
% cat ~/.profile
echo 'Running ~/.profile...'
기본 모드 로그인 셸(argv[0]은 로 시작 -
)은 사용하지 않습니다 ~/.profile
(그러나 사용함 ~/.zprofile
):
% zsh -c 'exec -a -zsh zsh' </dev/null
(출력 없음)
쉿/크쉬호환 모드 로그인 쉘은 .profile을 사용합니다.
% zsh -c 'exec -a -sh zsh' </dev/null
Running ~/.profile...
% zsh -c 'exec -a -ksh zsh' </dev/null
Running ~/.profile...