M1 Pro MacBook运行zsh的compinit报错:parse error: condition expected: $1
解决zsh中compinit触发parse error的问题
问题情况
在M1 Pro MacBook的zsh环境里,把autoload -Uz compinit && compinit加到.zshrc后,出现这个错误:
compinit:141: parse error: condition expected: $1
直接在Shell里跑compinit也会报同样的错,而且已经排除了$FPATH的影响,试过排查fpath里的函数、装zsh-completion、把zsh升到5.9、换成vcs_info这些方法,都没解决。
可行的排查和解决方法
1. 检查自定义函数是否撞名
compinit脚本内部会调用一些辅助函数,要是你自己写的函数(比如在.zshrc或者其他加载的脚本里)和这些内部函数重名,就会搞出解析错误。
- 跑下面的命令查有没有重名的函数:
functions | grep -E '(^_.*|compinit)' - 重点看
_compinit或者其他下划线开头的函数,要是发现和compinit内部逻辑冲突的自定义函数,改个名字再重新跑compinit试试。
2. 先测干净的zsh配置
要是自定义配置太多乱了,先临时用干净环境测试:
- 先备份当前的
.zshrc:cp ~/.zshrc ~/.zshrc.bak - 建个空白的
.zshrc,只加autoload -Uz compinit && compinit,重启Shell再测试。 - 要是没问题了,就一点点把原来
.zshrc里的配置加回去,加一次测一次,找出搞出冲突的那项。
3. 重新安装zsh
升级zsh后可能内置函数文件坏了,重新装一遍试试:
- 用Homebrew装的话,跑这个:
brew reinstall zsh - 装完之后,确认zsh路径,要是需要的话重新设默认Shell:
chsh -s /opt/homebrew/bin/zsh
4. 查系统级的zsh配置
看看/etc/zshrc、/etc/zprofile这些系统级配置文件,会不会有全局配置干扰compinit运行:
- 临时禁用系统配置,启动zsh的时候跑:
zsh -f - 在这个干净的zsh环境里跑
autoload -Uz compinit && compinit,要是正常,就说明系统级配置有问题,慢慢排查里面的内容。
内容的提问来源于stack exchange,提问作者raf
相关产品推荐
相关产品推荐

