在macOS上为zsh环境变量' PATH '添加搜索路径的正确文件是什么?



我刚刚编译了Ruby来源,位于/usr/local/ruby

为了访问Ruby的可执行文件,我编辑了~/.zshenv,将/usr/local/ruby/bin添加到export PATH指令中:

export PATH=/usr/local/ruby/bin:/usr/local/mysql/bin:/usr/local/sbin:/usr/local/bin:$PATH
^^^^^^^^^^^^^^^^^^^^

但是重新启动终端并运行which ruby仍然返回macOS默认的/usr/bin/ruby

事实上检查PATH显示:

% echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin:/usr/local/ruby/bin:/usr/local/mysql/bin:/usr/local/sbin:

~/.zshenv被执行时,另一个配置文件在/usr/bin之前添加到PATH

这发生在哪里?

.zshenv被处理时,我希望在PATH中找到/usr/bin(导致在环境变量的末尾有这个路径)。

我错过了什么?


我检查了,没有其他zsh我的主目录下的配置文件,只有.zshenv;

我也检查了/etc,发现

zprofile
zshrc
zshrc_Apple_Terminal

但是这些都不会改变PATH变量


on/etc/paths

/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin

但是,当.zshenv被处理时,PATH不应该已经设置了这些路径吗?

我不相信苹果会把你的/etc/paths目录单独留下,它在他们的范围内。除非您需要在多人级别上管理此内容,否则我会坚持在~中进行更改。为了快速发挥作用,我只将导出添加到.zshrc中,这就是我将rvm bin目录添加到我的路径的地方。

通过添加用户搜索目录来修改PATH的正确位置是最后一个来源的~/.zshrc

这个解决方案是基于对这个问题的答案和评论,以及对我的问题的其他答案和评论。


根据@Philippe的建议,我注意到实际上.zshenv是首先来源的,在任何其他配置文件/脚本之前。

在阅读了Zsh邮件列表存档的一篇文章后,我将PATH设置指令放入~/.zpath

那么~/.zpath必须来自~/.zshenv当不在登录shell:

if [[ $SHLVL == 1 && ! -o LOGIN ]]; then

source ~/.zpath

fi

来自~/.zprofile,仅在登录shell中执行

source ~/.zpath


<年代>或者n o̲̲̲̲̲c m o s̲̲̲可以直接编辑/etc/paths

/usr/local/mysql/bin

/usr/local/ruby/bin

/usr/local/bin /usr/local/sbin

/usr/bin

/bin

/usr/sbin

/sbin

最新更新