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

为什么`which -a`没有列出实际会执行的可执行文件?

你遇到的问题本质是which工具的能力边界和Shell命令执行优先级的差异导致的:

  1. which本身是独立的外部可执行工具,它的工作逻辑就是只扫描PATH环境变量中匹配的外部可执行文件,完全不感知当前Shell会话中定义的别名(alias)、自定义Shell函数、Shell内置命令。
  2. 而Shell执行命令的优先级是:别名 > 自定义Shell函数 > Shell内置命令 > PATH下的外部可执行文件。优先级高的匹配项会被优先调用,不会再找优先级更低的外部可执行文件。

你这里执行speedtest -V返回curl版本,说明speedtest已经被定义为指向curl的别名,比如你可能之前执行过alias speedtest='curl --speed-test'或者配置文件里写了对应的别名规则,这个别名优先级远高于/usr/local/bin下的speedtest可执行文件,所以会被优先调用。


验证方法

执行以下命令即可看到speedtest对应的所有命令定义,按执行优先级从高到低排序:

type -a speedtest

如果确实是别名导致的,输出第一行就会显示speedtest is aliased to 'curl xxx'。


解决方法

  • 临时取消本次会话的别名:执行unalias speedtest,之后再调用speedtest就会执行/usr/local/bin下的Ookla官方工具。
  • 永久取消:打开你当前使用的Bash配置文件(通常是~/.bashrc或者~/.bash_profile),删除其中alias speedtest=xxx的行,重启Shell即可生效。

补充说明

你遇到的whereis speedtest无输出属于macOS平台的正常现象:macOS系统自带的whereis工具默认只扫描系统预置的标准路径,不会读取当前用户的PATH配置,所以找不到brew安装在/usr/local/bin下的第三方工具。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 15:36:04