경로에서 실행 파일의 첫 번째 항목을 사용하지 않고 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 cmd
cmd
실행 권한이 있는 디렉토리에서 모든 일반 파일 $path
(별명, 함수, 내장 파일 제외) 을 찾으십시오 .
while은 which cmd
실행할 명령을 반환합니다 zsh
( in과 유사 하지만 대부분의 다른 쉘과 달리 내장 명령) which
.zsh
tcsh
zsh
hash
대부분의 다른 쉘과 마찬가지로 실행 파일의 경로를 테이블에 기억하므로 호출할 때마다 모든 디렉토리에서 해당 파일을 찾을 필요가 없습니다 .$path
해시 테이블( 의 연관 배열에 노출됨)은 $commands
명령(표준 POSIX 셸 명령)을 사용하여 zsh
조작 할 수 있습니다.hash
명령을 추가하기 전이나 전에 명령을 실행하면 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
잊다기억된 명령(잘못됨은닉처) 그래야 다음에 새로운 위치에서 찾아보실 수 있습니다.
답변2
/usr/local/bin/brew
일반적으로 심볼릭 링크입니다.
그래서/usr/local/bin/brew
그리고
/usr/local/Cellar/zplug/HEAD-9fdb388/bin/brew
아마 같은 파일일 겁니다.
유형:
ls -al /usr/local/bin/brew
확인하다.