为什么`which`指向不同的二进制文件?

我的系统上安装了2个curl版本,其中一个版本支持http2。

我以为我可以使用which来指向二进制文件,但它似乎不像我期望的那样工作。

 $ curl --http2 -I https://something.example.com curl: (1) Unsupported protocol $ which curl /usr/local/bin/curl $ /usr/local/bin/curl --http2 -I https://something.example.com HTTP/2 200 server: nginx/1.10.0 (Ubuntu) date: Thu, 08 Jun 2017 20:55:09 GMT content-length: 928 last-modified: Thu, 08 Jun 2017 19:43:10 GMT cache-control: public, max-age=31536000 accept-ranges: bytes 

which是指向我本地构建的二进制文件/usr/local/bin/curl但实际命令正在执行包二进制文件/usr/bin/curl

我没有curl的别名,所以有人可以向我解释为什么会这样吗? 我应该运行什么命令来找到curl的实际路径,我碰巧知道是/usr/bin/curl

如果您运行:

 echo $PATH 

你会得到类似的东西:

 /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 

如您所见, /usr/local/bin具有更高的优先级,因此bash将首先找到您本地安装的curl版本并停止搜索。

您可以通过编辑PATH环境变量来更改此行为,例如(在.profile ):

 PATH=/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/sbin:/usr/local/bin