You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MacOS Mojave中which命令失效问题排查求助

问题分析与解决办法

别担心,这不是你的系统设置出问题了——罪魁祸首是which命令的别名配置和MacOS自带的BSD版本which不兼容!

为什么会报错?

从你执行type --all which的结果能看到:

which is aliased to `alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde' which is /usr/bin/which

你的which被设置了一个别名,里面用到了--tty-only、--read-alias这类长选项,但MacOS Mojave自带的which是BSD版本的,它只支持短选项(比如-a、-s),完全不认识这些GNU风格的长选项,所以执行时就会抛出illegal option -- -的错误。

而type -all python的结果是正常的,它显示了你系统里存在的3个Python路径,这说明多版本Python的配置没有问题。

解决办法

1. 临时应急:绕过别名直接调用原始命令

如果只是想临时查询软件路径,直接用绝对路径调用BSD版which即可:

/usr/bin/which python

这样就不会触发别名里的错误参数,能正常返回结果。

2. 永久修复:二选一的方案

方案A:修改which的别名,适配BSD版本

编辑你的shell配置文件(比如~/.bash_profile或者~/.zshrc,取决于你用的是Bash还是Zsh),找到定义which别名的行,把它改成BSDwhich支持的格式。比如改成显示所有匹配路径的版本:

alias which='/usr/bin/which -a'

保存文件后,执行source ~/.bash_profile(或对应的配置文件)让修改生效,之后再用which python就正常了。

方案B:安装GNU版本的which(推荐给需要长选项的用户)

如果你依赖别名里的那些长选项功能,可以通过Homebrew安装GNU版本的which,它完全支持这些参数:

brew install which

安装完成后,GNU版which会被放在/usr/local/bin/which(Intel Mac)或/opt/homebrew/bin/which(Apple Silicon Mac),系统会优先使用这个版本,原来的别名就能正常工作了。

内容的提问来源于stack exchange,提问作者Kid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:00:57