Mac下zsh登录/非登录shell $PATH不一致及homebrew路径顺序异常问题
Mac设备zsh环境下homebrew $PATH顺序不一致问题解决方案
问题背景
在Mac设备上使用zsh时,出现$PATH读取不符合预期的情况:homebrew路径在不同shell环境中,一个被放在PATH末尾,一个被放在PATH开头,和常规登录/非登录shell的配置加载逻辑不符。
问题现象
- 安装homebrew时,程序自动将
eval "$(/opt/homebrew/bin/brew shellenv)"写入了~/.zprofile文件 - MacOS自带终端为登录shell,执行
ps -o comm= $$输出为-zsh,对应$PATH值为/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/homebrew/bin:/opt/homebrew/sbin,homebrew路径位于PATH末尾 - PyCharm集成终端为非登录shell,执行
ps -o comm= $$输出为/bin/zsh,对应$PATH值为/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin,homebrew路径位于PATH开头 - 按照常规zsh启动脚本加载逻辑,登录shell会读取/.zprofile,homebrew路径本应出现在登录shell的PATH开头;非登录shell不会读取/.zprofile,本应找不到homebrew路径,实际情况与预期完全相反。
问题根源
后续排查确认问题与tmux相关:
~/.zprofile中存在
eval "$(/opt/homebrew/bin/brew shellenv)"配置时,启动tmux后zsh的$path为/usr/local/bin /usr/bin /bin /usr/sbin /sbin /opt/homebrew/bin /opt/homebrew/sbin;未启动tmux时zsh的$path为/opt/homebrew/bin /opt/homebrew/sbin /usr/local/bin /usr/bin /bin /usr/sbin /sbin,路径顺序被调换。
解决方案
将~/.zprofile中的eval "$(/opt/homebrew/bin/brew shellenv)"替换为export PATH="/opt/homebrew/bin:$PATH",修改后tmux内外的$path顺序可保持一致。
内容的提问来源于stack exchange,提问作者noctua
相关产品推荐
相关产品推荐

