Warum verweist `which` auf eine andere Binärdatei?

Warum verweist `which` auf eine andere Binärdatei?

Ich habe zwei Versionen von Curl auf meinem System installiert, eine mit HTTP2-Unterstützung.

Ich dachte, ich könnte whichauf die Binärdatei verweisen, aber es scheint nicht so zu funktionieren, wie ich es erwarte.

$ 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  

whichzeigt auf meine lokal erstellte Binärdatei, /usr/local/bin/curlaber der eigentliche Befehl führt die Paketbinärdatei aus/usr/bin/curl

Ich habe keinen Alias ​​für curl. Kann mir bitte jemand erklären, warum das so ist? Und welchen Befehl muss ich ausführen, um den tatsächlichen Pfad zu curl zu finden, von dem ich zufällig weiß, dass er lautet:/usr/bin/curl

Antwort1

Wenn du läufst:

echo $PATH

Sie erhalten ungefähr Folgendes:

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Wie Sie sehen, /usr/local/binhat es eine höhere Priorität, sodass Bash zuerst Ihre lokal installierte Version von Curl findet und die weitere Suche einstellt.

Sie können dieses Verhalten ändern, indem Sie PATHdie Umgebungsvariable bearbeiten, zB (in .profile):

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

verwandte Informationen