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

为什么“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

答案1

如果你运行:

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

相关内容