Zsh가 ~/.profile에 도달하지 않음

Zsh가 ~/.profile에 도달하지 않음

방금 Ubuntu 시스템에 zsh를 설치했습니다. zsh가 init에서 ~/.profile을 실행하지 않는 것 같습니다. 제가 이해한 바에 따르면 이는 자동으로 수행되어야 합니다. 내가 무엇을 놓치고 있나요?

답변1

.profile.zprofile

Zsh는 로그인 쉘로 호출될 때 실행 ~/.zprofile되지 않고 실행됩니다. ~/.profile그 이유는 zsh가 스크립트를 깨뜨릴 만큼 표준 쉘과 충분히 비호환성이 있기 때문입니다.

Zsh는 or ~/.profile로 호출되면 실행됩니다 . 하지만 로그인할 때 zsh 프롬프트를 표시하는 것이 목표라면 아무런 도움이 되지 않습니다.shksh

/bin/sh로그인 쉘 을 만들고 export SHELL=/bin/zsh. ~/.profile그런 다음 터미널을 열면 터미널이 zsh를 시작합니다(일부 터미널 에뮬레이터는 설정을 따르지 않습니다 $SHELL). 하지만 shSSH를 통해 로그인하면 여전히 남아 있습니다 . 이 문제 exec zsh는 끝에 포함하여 해결할 수 있지만 ~/.profile(이것은 실행 중인 셸을 zsh로 대체함) 대화형 로그인에 대해서만 주의해야 하며 ~/.profileX 세션 시작과 같은 다른 스크립트에서 포함할 때는 주의해야 합니다. 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_profileand 가 있으면 읽는 ~/.profile반면, zsh는 읽기만 합니다 ~/.zprofile(구문이 기존 sh와 완전히 호환되지 않기 때문). 대부분의 구성에서는 ~/.profile그래픽 디스플레이 관리자에 로그인할 때 X 세션 시작 스크립트에 의해서도 로드됩니다.

터미널 에뮬레이터를 시작하고 쉘 프롬프트가 표시되거나 쉘을 명시적으로 시작하면 로그인 쉘이 아닌 쉘이 표시됩니다. ~/.profile(또는 ~/.zprofile)은 로그인할 때 실행하려는 명령이므로 로그인이 아닌 쉘에서는 이 파일을 읽지 않습니다 . 대신 대화형 zsh를 시작하면 ~/.zshrc. (Zsh는 ~/.zshrc로그인 쉘이든 아니든 모든 대화형 쉘에서 읽습니다. bash는 이상하게도 ~/.bashrc로그인 쉘에서 읽지 않습니다.)

일반적으로 ~/.profile환경 변수 정의가 포함되어 있으며 로그인할 때 또는 전체 세션 동안 한 번 실행하려는 일부 프로그램을 시작할 수 있습니다. ~/.zshrc별칭 및 함수 정의, 셸 옵션 설정, 완성 설정, 프롬프트 설정, 키 바인딩 등과 같이 모든 셸 인스턴스에 대해 수행해야 하는 작업이 포함되어 있습니다.

답변2

참을성이 없는 사람들을 위한 짧은 대답:

  1. ~/.profilezsh로그인 시 로드되지 않습니다 .
  2. zsh~/.zprofile로그인 시 로드됩니다 .
  3. 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...

관련 정보