在我的 MacBook 上,我使用 zsh,我通过.zshenv
和一个.zshrc
。
如果我echo
在 的末尾添加一条语句.zshenv
,该$PATH
变量将如下所示:
/opt/homebrew/bin
/opt/homebrew/sbin
$HOME/.local/bin
/usr/bin
/bin
/usr/sbin
/sbin
然而,启动终端后,看起来$PATH
像这样:
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
/opt/homebrew/bin
/opt/homebrew/sbin
$HOME/.local/bin
我echo $PATH
在 my - 的开头添加了一条语句.zshrc
,该语句源自,并且实际上我验证了在加载.zshenv
时,已更改为第二个。.zshrc
$PATH
我该如何防止这种情况?
我想这与 中的文件有关/etc
?例如,我注意到有一个/etc/paths
包含以下内容的文件:
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
答案1
这个问题的答案可以在这个问题在 AskDifferent(Unix&Linux StackExchange 的 Apple 版本)上。
解释
当 zsh 被获取时,文件按以下顺序读取(来自 zsh 官方文档):
首先从 /etc/zshenv 读取命令;这不能被覆盖。[...] 然后从 $ZDOTDIR/.zshenv 读取命令。如果 shell 是登录 shell,则从 /etc/zprofile 读取命令,然后从 $ZDOTDIR/.zprofile 读取。然后,如果 shell 是交互式的,则从 /etc/zshrc 读取命令,然后从 $ZDOTDIR/.zshrc 读取。最后,如果 shell 是登录 shell,则读取 /etc/zlogin 和 $ZDOTDIR/.zlogin。
在 macOS 中/etc/zprofile
,源脚本$PATH
根据这些文件的内容覆盖:
/etc/paths
/etc/paths.d
/etc/manpaths
/etc/manpaths.d
怎么解决?
要解决这个问题,您可以:
- 直接修改
/etc/paths
(不推荐) $PATH
将修改的行移至.zprofile
或.zshrc
。