私に思い浮かぶ3つの可能性:
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 の最初を返します。