為什麼「which」指向不同的二進位檔案?

為什麼「which」指向不同的二進位檔案?

我的系統上安裝了兩個版本的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

相關內容