나를 위해 떠오르는 세 가지 가능성 :
- 에 대한 별칭이 있습니다
emacs
(확인한)
- 기능이 존재합니다
emacs
- 새로운
emacs
바이너리는 쉘의 PATH 해시 테이블에 없습니다.
기능이 있는지 확인할 수 있습니다 emacs
.
bash-3.2$ declare -F | fgrep emacs
declare -f emacs
그리고 그것을 제거하십시오 :
unset -f emacs
또한 쉘에는 PATH의 각 바이너리에 대한 참조가 포함 된 PATH 해시 테이블이 있습니다. PATH의 다른 곳에서 기존 바이너리와 이름이 같은 새 바이너리를 추가하는 경우 해시 테이블을 업데이트하여 쉘에 알려야합니다.
hash -r
추가 설명 :
which
bash 내장이 아니기 때문에 함수에 대해 알지 못합니다.
bash-3.2$ emacs() { echo 'no emacs for you'; }
bash-3.2$ emacs
no emacs for you
bash-3.2$ which emacs
/usr/bin/emacs
bash-3.2$ `which emacs` --version | head -1
GNU Emacs 22.1.1
이 스크립트는 새로운 이진 해시 테이블 동작을 보여줍니다.
bash-3.2$ PATH=$HOME/bin:$PATH
bash-3.2$ cd $HOME/bin
bash-3.2$ cat nofile
cat: nofile: No such file or directory
bash-3.2$ echo echo hi > cat
bash-3.2$ chmod +x cat
bash-3.2$ cat nofile
cat: nofile: No such file or directory
bash-3.2$ hash -r
bash-3.2$ cat nofile
hi
bash-3.2$ rm cat
bash-3.2$ cat nofile
bash: /Users/mrb/bin/cat: No such file or directory
bash-3.2$ hash -r
bash-3.2$ cat nofile
cat: nofile: No such file or directory
호출하지는 않았지만 which cat
항상 cat
쉘의 해시 테이블을 사용하지 않기 때문에 항상 PATH 에서 첫 번째 를 반환합니다 .