在哪里放置$ PATH变量声明中的zsh?在哪里放置$ PATH变量声明中的zsh?(Where t

2019-05-14 01:59发布

我爱zsh ,但我不知道在哪里把我的$PATH和其他变量的断言? 我发现,它们散布在文件之间.zshrc .zprofile .bashrc .bash_profile ,有时一倍。

我认识到,具有内部的任何bash ,因为我使用的文件并没有太大的意义看zsh ,但正是我应该把我的rvmpythonnode等添加到我的$PATH

有没有我应该使用(即特定的文件.zshenv其当前存在在我的安装),我目前使用的手机之一,或者它甚至重要吗?

Answer 1:

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

和阅读man page了解之间的差异:

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


关于我的评论

在我的评论附答案千电子伏了 ,我说:

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

这证明是部分不正确: /etc/profile 可以通过来源zsh然而 ,如果该只发生zsh被“援引为shksh ”; 在这些兼容模式:

通常zsh的启动/关机脚本不会被执行。 登录壳源/ etc / profile文件,然后$ HOME / .profile文件。 如果ENV环境变量设置上调用,$ ENV在配置文件脚本后采购。 ENV的值被解释为一个路径名之前进行参数扩展,命令替换和算术扩展。 [ 人zshall, “兼容性” ]。

该ArchWiki ZSH链接说:

登录时,源岩组按此顺序下列文件:
/ etc / profile文件
该文件由登录时的所有兼容Bourne shell引用

这是implys /etc/profile 总是读取 zsh在登录-我没有与Arch Linux的项目的经验; 维基可能是该分发正确的,但它不是通常是正确的。 相比zsh的手册页的信息不正确的,似乎并不适用于zsh的在OS X(在路径$PATH中设置/etc/profile不使其向我的zsh会话)。



为了解决这样的问题:

正是在那里我应该把我的RVM,蟒蛇,节点等添加到我的$ PATH?

一般来说,我会导出我的$PATH~/.zshrc ,但它是值得拥有的读zshall手册页,特别是“启动/关闭文件”部分- ~/.zshrc阅读在交互 shell,可能会或可能不能满足您的需求-如果你想在$PATH为每zsh由您(包括调用壳interactive ,而不是,都login不,等等),然后~/.zshenv是一个更好的选择。

有没有我应该使用(即.zshenv其当前不存在在我的安装),我目前使用的手机之一,或者它甚至关系一个特定的文件?

有一群在启动时读取文件(检查链接的man页),并有一个原因是-每一个文件都有它特别的地方(为每个用户设置,为用户特定的,用于登录shell设置的设置,对于每一个shell设置等)。
不要担心~/.zshenv不存在-如果你需要它,做它,它就会被读取。

.bashrc.bash_profile 被读取zsh ,除非你明确地从源头它们~/.zshrc或相似; 之间的语法bashzsh 并不总是兼容。 双方.bashrc.bash_profile是专为bash设置,而不是zsh设置。



Answer 2:

下面是从下启动/关闭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

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



Answer 3:

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

解:


只是贴上无论你是在〜/ .bashrc前面粘贴:

~/.zshrc


文章来源: Where to place $PATH variable assertions in zsh?
标签: macos shell zsh