在 zsh 中何处放置 $PATH 变量断言?

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

我意识到在 bash文件中包含任何内容都没有太大意义,因为我使用的是 zsh,而是 我到底应该把我的 ABC2,ABC3,ABC4等添加到我的 $PATH

是否有一个特定的文件我应该使用(即 .zshenv,它是 没有当前存在于我的安装) ,其中一个我当前使用,或者它甚至有关系吗?

242697 次浏览

Dr 版本: 使用 ~/.zshrc

请阅读手册页来理解以下两者之间的区别:

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


关于我的评论

我在附于答案 Kev 给的的评论中说:

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

这被证明是部分不正确的: /etc/profile 是由 zsh来源。只有当 zsh被“作为 shksh调用”时,才会发生这种情况; 在这些兼容模式中:

通常的 zsh 启动/关闭脚本不会执行。登录 shell source/etc/profile,然后是 $HOME/。侧写。如果在调用时设置了 ENV 环境变量,则在配置文件脚本之后来源于 $ENV。ENV 的值在被解释为路径名之前要经过参数展开、指令替代展开和算术展开。[ Man zshall“兼容性”].

ArchWiki ZSH 链接表示:

在登录时,Zsh 按以下顺序提供下列文件:
/etc/profile
此文件在登录时由所有与 Bourne 兼容的 shell 提供

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



回答这个问题:

我到底应该把 rvm、 python、 node 等添加到 $PATH 的什么位置?

一般来说,我会从 ~/.zshrc导出我的 $PATH,但是值得读一读 Zshall手册页,特别是“启动/关机文件”部分-~/.zshrc是为 互动 shell 而读的,它可能适合也可能不适合你的需要-如果你想为每个 zsh shell 调用 $PATH(包括 interactive和不,包括 login和不,等等) ,那么 ~/.zshenv是一个更好的选择。

是否有一个特定的文件我应该使用(即。Zshenv 在我的安装中当前不存在) ,我当前正在使用的一个,或者它甚至有关系吗?

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

.bashrc.bash_profilezsh读取的 .bash_profile0,除非您显式地从 ~/.zshrc或类似的源代码中获取它们; bashzsh之间的语法总是兼容的 .bash_profile1。.bashrc.bash_profile都是为 bash设置而设计的,而不是 zsh设置。

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

   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

你可以得到更多的信息 给你

我遇到了类似的问题(bash 终端命令正常工作,但 zsh 显示命令没有发现错误)

解决方案:


只要把你之前粘贴到 ~/. bashrc 的内容粘贴到:

~/.zshrc