`which` が別のバイナリを指しているのはなぜですか?

`which` が別のバイナリを指しているのはなぜですか?

私のシステムには 2 つのバージョンの curl がインストールされており、そのうち 1 つは 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この動作は、環境変数を編集することで変更できます。例: (in .profile):

PATH=/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/sbin:/usr/local/bin

関連情報