Почему `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, так что, может, кто-нибудь объяснит мне, почему это так? И какую команду я должен выполнить, чтобы найти фактический путь к завитку, который я случайно узнаю /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