zsh에서 $ PATH 변수 어설 션을 어디에 배치합니까?


110

나는을 좋아 zsh하지만 내 $PATH및 기타 변수 주장을 어디에 배치해야할지 모르겠 습니까? 나는 그들이 파일 사이에 흩어져 .zshrc .zprofile .bashrc .bash_profile있고 때로는 두 배가 되는 것을 발견했습니다 .

나는 안에 아무것도 가진 것을 깨닫게 bash파일 것은 내가 사용으로 보는 많은 이해가되지 않습니다 zsh,하지만 정확히 어디에 내 배치되어야한다 rvm, python, node제에 등 추가를 $PATH?

내가 (즉, 사용되어야 할 특정 파일이 있나요 .zshenv않는 되지 현재 내 설치에 존재), 나는 현재 사용하고있는 사람 중 하나, 또는 심지어 중요합니까?

답변:


148

tl; dr 버전 : 사용 ~/.zshrc

그리고 man 페이지읽고 차이점을 이해하십시오.

~/.zshrc, ~/.zshenv~/.zprofile.


내 의견에 대해

kev가 준 답변에 첨부 된 내 의견에서 다음 과 같이 말했습니다.

이것은 잘못된 것 같습니다-/ etc / profile은 내가 찾을 수있는 zsh 문서에 나열되어 있지 않습니다.

이는 부분적으로 잘못된 것으로 판명 되었습니다 . 에서 제공 /etc/profile 할 수 있습니다 zsh. 그러나 이것은 zsh" sh또는 ksh"으로 호출되는 경우에만 발생합니다 . 다음 호환성 모드에서 :

일반적인 zsh 시작 / 종료 스크립트는 실행되지 않습니다. 로그인 쉘 소스 / etc / profile 뒤에 $ HOME / .profile이 있습니다. ENV 환경 변수가 호출시 설정된 경우 $ ENV는 프로필 스크립트 다음에 제공됩니다. ENV의 값은 경로 이름으로 해석되기 전에 매개 변수 확장, 명령 대체 및 산술 확장의 영향을받습니다. [ man zshall, "호환성" ].

ArchWiki zsh을 링크는 말합니다 :

로그인시 Zsh는 다음 파일을 다음 순서로 제공합니다.
/ etc / profile
이 파일은 로그인시 모든 Bourne 호환 쉘에서 제공됩니다.

이 implys /etc/profile되어 항상 읽을 으로 zsh로그인 할 때 - 나는 아치 리눅스 프로젝트에 경험이 없어; 위키가 해당 배포판에 맞을 수 있지만 일반적으로 올바르지 않습니다 . zsh 매뉴얼 페이지에 비해 정보 정확하지 않으며 OS X의 zsh에 적용되지 않는 것 같습니다 ( $PATHset in 경로 /etc/profile가 내 zsh 세션으로 연결되지 않음).



질문을 해결하려면 :

내 $ PATH에 내 rvm, python, node 등을 정확히 어디에 추가해야합니까?

일반적으로, 나는 나의를 내보낼 것 $PATH에서 ~/.zshrc, 그러나의 읽기 가진 그것의 가치 zshall의 맨 페이지를, 특히 "시작 / 종료 FILES"절 - ~/.zshrc에 대해 읽어 상호 작용 또는 필요에 따라하지 않을 수도 있습니다 쉘, - 당신이 원하는 경우 $PATH에 대한 zsh사용자가 호출 한 모든 쉘 (둘 다 interactive및 아님, 둘 다 login및 아님 등) ~/.zshenv이 더 나은 옵션입니다.

내가 사용해야하는 특정 파일 (예 : 현재 설치에없는 .zshenv), 현재 사용중인 파일 중 하나가 있습니까, 아니면 중요합니까?

시작시 읽을 수있는 파일이 많고 (링크 된 man페이지 확인 ) 그 이유가 있습니다. 각 파일에는 특정 위치 (모든 사용자 설정, 사용자 별 설정, 로그인 셸 설정, 모든 셸 설정, 기타).
존재하지 않는 것에 대해 걱정하지 마십시오. ~/.zshenv필요한 경우 작성하면 읽을 수 있습니다.

.bashrc하고 .bash_profile있습니다 하지 읽을 zsh명시 적으로 그들을 소스하지 않는 한, ~/.zshrc또는 유사한; bash와 사이의 구문 zsh이 항상 호환되는 것은 아닙니다 . .bashrc및 둘 다 설정이 아닌 설정을 .bash_profile위해 설계되었습니다 .bashzsh


3
철저한 답변 simont 이상을 주셔서 감사합니다. 당신이 말하는 것을 이상한 .bashrc.bash_profile읽을되지 않습니다 zsh내가 현재 내 가지고 rvm뿐만 아니라 $PATH에서 .bashrc, 그리고 내 python에서뿐만 아니라 .bash_profile, 모두가 잘 추가되고 있습니다. 어쨌든 다른 모든 구성이 거기에 저장 되므로 모든 $PATH내보내기를 ~/.zshrc로 이동할 zsh것입니다. 저는 인정해야합니다. 저는 다른 종류의 껍질에 너무 익숙하지 않습니다. 당신이 게시 한 링크를 읽음으로써 나는 인터랙티브 쉘을 사용하고 있다고 생각하지만, 확실히하기 위해 더 읽을 것입니다. 다시 한번 감사드립니다!
stefmikhail

30

다음은 STARTUP / SHUTDOWN FILES 섹션에있는 zsh man 페이지의 문서입니다.

   Commands  are  first  read from /etc/zshenv this cannot be overridden.
   Subsequent behaviour is modified by the RCS and GLOBAL_RCS options; the
   former  affects all startup files, while the second only affects global
   startup files (those shown here with an path starting with  a  /).   If
   one  of  the  options  is  unset  at  any point, any subsequent startup
   file(s) of the corresponding type will not be read.  It is also  possi-
   ble  for  a  file  in  $ZDOTDIR  to  re-enable GLOBAL_RCS. Both RCS and
   GLOBAL_RCS are set by default.

   Commands are then read from $ZDOTDIR/.zshenv.  If the shell is a  login
   shell,  commands  are  read from /etc/zprofile and then $ZDOTDIR/.zpro-
   file.  Then, if the  shell  is  interactive,  commands  are  read  from
   /etc/zshrc  and then $ZDOTDIR/.zshrc.  Finally, if the shell is a login
   shell, /etc/zlogin and $ZDOTDIR/.zlogin are read.

이것에서 우리는 읽은 순서 파일을 볼 수 있습니다 :

/etc/zshenv    # Read for every shell
~/.zshenv      # Read for every shell except ones started with -f
/etc/zprofile  # Global config for login shells, read before zshrc
~/.zprofile    # User config for login shells
/etc/zshrc     # Global config for interactive shells
~/.zshrc       # User config for interactive shells
/etc/zlogin    # Global config for login shells, read after zshrc
~/.zlogin      # User config for login shells
~/.zlogout     # User config for login shells, read upon logout
/etc/zlogout   # Global config for login shells, read after user logout file

여기에서 자세한 정보를 얻을 수 있습니다 .


18

비슷한 문제가 발생했습니다 (bash 터미널 명령이 올바르게 작동했지만 zsh에서 명령을 찾을 수 없음 오류가 표시됨)

해결책:


이전에 ~ / .bashrc에 붙여 넣은 내용을 다음 위치에 붙여 넣으십시오.

~/.zshrc
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.