在zsh中放置$ PATHvariables断言的地方在哪里?

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

我知道在bash文件中有什么东西没有什么意义,因为我正在使用zsh ,但是我应该把我的rvmpythonnode等添加到我的$PATH

有一个特定的文件,我应该使用(即.zshenv目前存在于我的安装),我正在使用的一个,或者它甚至重要?

tl; dr版本:使用~/.zshrc ,并阅读手册页以了解~/.zshenv~/.zshenv~/.zprofile


关于我的评论

在我给kev回答的评论中,我说:

这似乎是不正确的 – 我可以find任何zsh文档中没有列出/ etc / profile。

这部分是不正确的: /etc/profile 可能来自zsh但是 ,只有当zsh被“作为shksh调用”时才会发生这种情况。 在这些兼容模式下:

通常的zsh启动/closures脚本不会执行。 loginshell源码/ etc / profile,然后是$ HOME / .profile。 如果在调用时设置了ENV环境variables,$ ENV将在configuration文件脚本之后。 ENV的值在被解释为path名之前进行参数扩展,命令replace和算术扩展。 [ man zshall,“兼容性” ]。

ArchWiki ZSH链接说:

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

这意味着/etc/profile 始终zsh在login时读取 – 我对Arch Linux项目没有任何经验; 维基可能是正确的分发,但它通常是正确的。 这些信息与zsh手册页相比不正确的,似乎并不适用于OS X上的zsh(在/etc/profile设置的$PATH不会对我的zsh会话产生影响)。


为了解决这个问题:

我到底应该把我的rvm,python,node等添加到我的$ PATH中?

一般来说,我会从~/.zshrc .zshrc中导出我的$PATH ,但值得读一下zshall手册页,特别是“STARTUP / SHUTDOWN FILES”部分 – ~/.zshrc被读取为交互式 shell,可能或可能不适合你的需求 – 如果你想为你调用的每一个zsh shell(包括interactive而不是,不pipe是否login等)使用$PATH ,那么~/.zshenv是一个更好的select。

有一个特定的文件,我应该使用(即.zshenv目前不存在于我的安装),我正在使用的一个,或者它甚至重要?

有一堆文件在启动时读取(检查链接的man页),这是有原因的 – 每个文件都有特定的位置(每个用户的设置,用户特定的设置,loginshell的设置,每个shell的设置等等)。
不要担心~/.zshenv不存在 – 如果你需要它,将它读取。

.bashrc.bash_profile 不能zsh读取,除非你明确的从~/.zshrc或类似的地方获取它们。 bashzsh之间的语法并不总是兼容的。 .bashrc.bash_profile都是为bash设置而devise的,而不是zsh设置。

以下是来自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 

你可以在这里获得更多的信息。

我有类似的问题(在bashterminal命令工作正常,但zsh显示命令未find错误)

解:

只要把你之前粘贴在〜/ .bashrc中的任何东西粘贴到:

 ~/.zshrc