160

我喜欢zsh,但我不确定在哪里放置我的$PATH和其他变量断言?我发现它们分散在文件之间.zshrc .zprofile .bashrc .bash_profile,有时会加倍。

我意识到在bash文件中包含任何内容并没有多大意义,因为我正在使用zsh,但是我应该将我rvm的 ,pythonnode添加到我的$PATH?

是否有我应该使用的特定文件(即我的安装中当前.zshenv存在的文件),我当前正在使用的文件之一,或者它甚至重要吗?

4

3 回答 3

207

tl;博士版本:使用~/.zshrc

阅读手册页以了解以下之间的区别:

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


关于我的评论

在我对kev给出的答案的评论中,我说:

这似乎是不正确的 - /etc/profile 没有在我能找到的任何 zsh 文档中列出。

事实证明这部分不正确:/etc/profile 可能来自zsh. 但是,这仅在zsh“调用为shksh”时才会发生;在这些兼容模式下:

不执行通常的 zsh 启动/关闭脚本。登录 shell 源 /etc/profile 后跟 $HOME/.profile。如果在调用时设置了 ENV 环境变量,则 $ENV 源自配置文件脚本。ENV 的值在被解释为路径名之前经过参数扩展、命令替换和算术扩展。[ man zshall,“兼容性” ]。

ArchWiki ZSH 链接说:

登录时,Zsh 按以下顺序获取以下文件:
/etc/profile
该文件由所有 Bourne 兼容的 shell 在登录时获取

这意味着登录/etc/profile总是会读到- 我对zshArch Linux 项目没有任何经验;wiki 可能对那个发行版是正确的,但它通常正确。与 zsh 手册页相比,该信息正确,并且似乎不适用于 OS X 上的 zsh($PATH设置中的路径/etc/profile不会进入我的 zsh 会话)。



要解决这个问题:

我应该将我的 rvm、python、node 等添加到我的 $PATH 的确切位置?

一般来说,我会导出我$PATH的 from ~/.zshrc,但值得阅读zshall手册页,特别是“启动/关闭文件”部分 -~/.zshrc用于交互式shell,它可能适合也可能不适合您的需求 - 如果您想要$PATHfor您调用的每个zshshell(两者interactive都不是,两者login都不是,等等),然后~/.zshenv是一个更好的选择。

是否有我应该使用的特定文件(即我的安装中当前不存在的 .zshenv),我当前正在使用的文件之一,或者它是否重要?

启动时读取了一堆文件(检查链接man页面),这是有原因的 - 每个文件都有其特定的位置(每个用户的设置,用户特定的设置,登录 shell 的设置,每个 shell 的设置, ETC)。
不用担心~/.zshenv不存在——如果你需要它,制作它,它会被阅读。

.bashrc并且不会.bash_profile被阅读,除非您明确地从或类似来源获得它们;和之间的语法并不总是兼容的。两者和都是为设置而设计的,而不是设置。zsh~/.zshrcbashzsh.bashrc.bash_profilebashzsh

于 2012-05-14T12:27:05.557 回答
40

这是 STARTUP/SHUTDOWN FILES 部分下 zsh 手册页中的文档。

   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

您可以在此处获得更多信息。

于 2015-01-02T13:01:19.227 回答
20

我有类似的问题(在 bash 终端命令工作正常但 zsh 显示命令未找到错误)

解决方案:


只需将您之前在 ~/.bashrc 中粘贴的内容粘贴到:

~/.zshrc
于 2015-03-22T04:36:11.507 回答