모든 command 마다 도는 lookup
git status 라고 치면 shell 은 디스크 전체를 뒤지지 않아. $PATH — 콜론으로 구분된 디렉터리 목록 — 을 왼쪽부터 오른쪽으로 걸으면서 처음 만난 git 을 실행해. echo $PATH 가 목록을 보여주고, which git 이 어떤 게 뽑혔는지 알려줘.
순서가 모든 걸 결정해
순서가 진짜 핵심이야. /opt/homebrew/bin:/usr/bin:/bin 이면 Homebrew 가 시스템보다 우선. 만약 /usr/bin 이 먼저 오면 Homebrew 로 깐 python3 가 있어도 시스템 거가 잡혀. 해결은 .zprofile 에 export PATH="/opt/homebrew/bin:$PATH" 로 prepend.
which / type / command -v
도구 셋, 답 셋:
which git— external binary 만 봄. alias / function 놓침.type git— shell 이 알아. alias / function / builtin / external 인지 알려줘.command -v git— POSIX, 스크립트용. 경로 반환하거나 non-zero exit. 스크립트에선 이거 써.
zsh 에는 whence -a git 가 있어 — 모든 정의를 다 보여줘. 하나가 다른 하나를 가릴 때 유용해.
hash 캐시
shell 은 한 번 실행한 command 의 경로를 캐시에 저장해서 매번 $PATH 안 걸어. 그래서 새로 brew install 한 직후에 'command not found' 가 뜰 수 있어 — hash -r (bash) 또는 rehash (zsh) 로 캐시 flush 하면 새로 잡혀.
PATH 에 . 넣지 마
현재 디렉터리 (.) 를 $PATH 에 넣으면 편한 것 같지만 보안 footgun 이야. 누가 네가 cd 할 디렉터리에 파일을 뿌려두면 어떤 command 든 hijack 가능. 로컬 스크립트는 항상 ./script.sh 로 명시 실행.