所以我只安装了 macOS Catalina 和 MacPorts。这导致我不得不修改 .zshenv 文件中的 PATH 和 MANPATH 环境变量,如下所示:
# configure an environment variable for Racket
export RACKET=/Applications/Racket
# configure an appropriate PATH variable for use with MacPorts
export PATH="/opt/local/bin:/opt/local/sbin:$RACKET/bin:$PATH"
# configure an appropriate MANPATH variable for use with MacPorts
export MANPATH="/opt/local/share/man:$RACKET/man:$MANPATH"
Run Code Online (Sandbox Code Playgroud)
但是,运行以下命令echo $PATH使我得到了与预期相反的结果:
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/local/bin:/opt/local/sbin:/Applications/Racket/bin
Run Code Online (Sandbox Code Playgroud)
关于我应该做些什么来解决这个问题的任何想法?事实上,对于/opt/local/*我使用的相当多的实用程序,它的全部内容都在最后破坏了一些构建脚本。
在~/.zshrcor 中添加以下代码~/.zprofile:
# Prepend the $PATH
[[ -f $HOME/.zshenv ]] && source $HOME/.zshenv
# remove duplicate $PATH
typeset -U PATH
Run Code Online (Sandbox Code Playgroud)
解释:
根据zsh 加载顺序,对于zsh中的任何登录 shell,它会etc/zprofile在 after ~/.zshenvbut before调用~/.zshrc,其中包含usr/libexec/path_helper:
# file: etc/zprofile
# system-wide environment settings for zsh(1)
if [ -x /usr/libexec/path_helper ]; then
eval `/usr/libexec/path_helper -s`
fi
Run Code Online (Sandbox Code Playgroud)
上面的代码移动到/usr/bin:/bin:/usr/sbin:/sbin你自己添加的前面,$PATH比如/opt/local/bin:/opt/local/sbin...
再把自己添加的路径加到前面后,.zshenv再重新source/etc/zprofile一下,type -U PATH保留path在第一个出现的地方,去掉重复的。
我怀疑问题是.zshenv在任何其他启动文件之前执行,这些文件也在修改PATH. (这不是完整的解释,/etc/zprofile应该是覆盖PATH,而不是前置。但它很接近。)
不要设置PATH(.zshenv它是为所有shell 提供的,无论是否交互式),而是执行它~/.zprofile。
man zsh有关获取哪些文件以及何时获取的完整说明,请参阅有关启动/关闭文件的部分。
| 归档时间: |
|
| 查看次数: |
1124 次 |
| 最近记录: |