Почему `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

Связанный контент