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