我刚刚编译了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