' which'가 다른 바이너리를 가리키는 이유는 무엇입니까?

' which'가 다른 바이너리를 가리키는 이유는 무엇입니까?

내 시스템에는 두 가지 버전의 컬이 설치되어 있습니다. 하나는 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

나는 컬에 대한 별칭이 없습니다. 누군가 이것이 왜 그런지 설명해 주시겠습니까? 그리고 제가 알고 있는 컬의 실제 경로를 찾으려면 어떤 명령을 실행해야 할까요?/usr/bin/curl

답변1

실행하는 경우:

echo $PATH

다음과 비슷한 것을 얻게 될 것입니다.

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

보시다시피 /usr/local/bin우선순위가 더 높으므로 bash는 로컬에 설치된 컬 버전을 먼저 찾고 더 이상 검색을 중지합니다.

PATH환경 변수를 편집하여 이 동작을 변경할 수 있습니다 (예: (in .profile)):

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

관련 정보