어떤 상황에서 경로에서 처음 발견 된 실행 파일이 사용되지 않습니까?


15

경로에서 처음으로 실행 파일을 사용하지 않는 osx에서 zsh (5.4.2_1 homebrew와 함께 설치됨)가있는 이상한 행동을하고 있습니다.

시나리오는 다음과 같습니다.

echo $PATH 보고:

/usr/local/Cellar/zplug/HEAD-9fdb388/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

양조는 모두에

/usr/local/Cellar/zplug/HEAD-9fdb388/bin     

usr/local/bin/brew

다음 을 반환 하는 -a brew 를 실행 하여 확인 합니다.

/usr/local/Cellar/zplug/HEAD-9fdb388/bin/brew   
/usr/local/bin/brew

그러나 어떤 추출을 실행하면 다음 반환됩니다.

/usr/local/bin/brew

그리고 양조/usr/local/bin/brew 보다는 실행/usr/local/Cellar/zplug/HEAD-9fdb388/bin/brew

추출이 경로의 초기에있을 때 어떻게 이런 일이 일어날 수 있습니까?

감사합니다.


7
rehash그런 다음 다시 실행하십시오. 그래도 계속 발생하면 편집하십시오 .
Michael Homer

@ MichaelHomer : 그렇습니다. 여기에서 경험하십시오.
Joshua

답변:


25

which -a cmdcmd디렉토리에서 $path(별칭, 함수, 내장 등) 디렉토리에서 실행 권한이있는 모든 일반 파일을 찾습니다 .

하지만 which cmd반환 명령을 zsh실행하는 것은 ( which의 내장입니다 zsh처럼 tcsh하지만, 대부분의 다른 조개와는 달리이).

zsh다른 쉘과 마찬가지로 hash테이블 에서 실행 파일의 경로를 기억하여 $path호출 할 때마다 모든 디렉토리에서 찾아 볼 필요가 없습니다 .

해당 해시 테이블 (의 $commands연관 배열에 노출됨 zsh)은 hash명령 (표준 POSIX 셸 명령)을 사용하여 조작 할 수 있습니다 .

당신은 실행 한 경우 brew(또는 명령 which/type/whence brew이 추가되기 전에 해시 / 캐시 것을 준비하는 것, 또는 사용 명령 완료 또는 아무것도) /usr/local/Cellar/zplug/HEAD-9fdb388/bin전이나 /usr/local/Cellar/zplug/HEAD-9fdb388/bin에 추가 된이 $path, zsh그 경로를 기억하고로 저장 한 것을 $commands[brew]=/usr/local/bin/brew.

이 경우 hash -r(Bourne 쉘에서와 같이) 또는 rehash(csh에서와 같이) 사용 하여 기억 된 명령 을 zsh 잊어 버릴 수 있으므로 ( 캐시 무효화 ) 다음에 찾아서 새 위치에서 찾을 수 있습니다.


고마워-이것은 문제를 분류했습니다. $ command [brew]를 반향시킬 수 있어야합니까-아무것도 보이지 않습니까?
연속체

1
@continuum, 죄송합니다. 제 잘못 $commands은 아닙니다 $command. 편집을 참조하십시오.
Stéphane Chazelas

0

/usr/local/bin/brew 일반적으로 심볼릭 링크입니다.

그래서 /usr/local/bin/brew/usr/local/Cellar/zplug/HEAD-9fdb388/bin/brew

아마도 같은 파일 일 것입니다.

유형:

ls -al /usr/local/bin/brew

확인.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.