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

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

경로에서 실행 파일의 첫 번째 항목을 사용하지 않고 osx(homebrew를 사용하여 설치된 5.4.2_1)에서 zsh를 사용할 때 이상한 동작이 발생합니다.

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

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

이것은 실행하여 확인되었습니다.어느 양조주반품:

/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

Brew가 경로의 앞부분에 있을 때 어떻게 이런 일이 발생할 수 있습니까?

도움을 주시면 감사하겠습니다.

답변1

which -a cmdcmd실행 권한이 있는 디렉토리에서 모든 일반 파일 $path(별명, 함수, 내장 파일 제외) 을 찾으십시오 .

while은 which cmd실행할 명령을 반환합니다 zsh( in과 유사 하지만 대부분의 다른 쉘과 달리 내장 명령) which.zshtcsh

zshhash대부분의 다른 쉘과 마찬가지로 실행 파일의 경로를 테이블에 기억하므로 호출할 때마다 모든 디렉토리에서 해당 파일을 찾을 필요가 없습니다 .$path

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

명령을 추가하기 전이나 전에 명령을 실행하면 brew( which/type/whence brew또는 명령 완성 또는 해싱/캐싱을 시작하는 모든 것을 사용하여) 해당 경로가 ./usr/local/Cellar/zplug/HEAD-9fdb388/bin/usr/local/Cellar/zplug/HEAD-9fdb388/bin$pathzsh$commands[brew]=/usr/local/bin/brew

이 경우 hash -r(Bourne 쉘에서와 같이) 또는 rehash(csh에서와 같이)을 사용하여 얻을 수 있습니다.zsh 잊다기억된 명령(잘못됨은닉처) 그래야 다음에 새로운 위치에서 찾아보실 수 있습니다.

답변2

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

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

아마 같은 파일일 겁니다.

유형:

ls -al /usr/local/bin/brew

확인하다.

관련 정보