As três possibilidades que me vêm à mente:
- Existe um alias para
emacs
(que você verificou) - Existe uma função para
emacs
- O novo binário
emacs
não está no hashtable PATH do seu shell.
Você pode verificar se tem uma função emacs
:
bash-3.2$ declare -F | fgrep emacs
declare -f emacs
E remova-o:
unset -f emacs
Seu shell também tem um hashtable PATH que contém uma referência para cada binário em seu PATH. Se você adicionar um novo binário com o mesmo nome de um existente em outro lugar em seu PATH, o shell precisará ser informado atualizando o hashtable:
hash -r
Explicação adicional:
which
não sabe sobre funções, pois não é um bash embutido:
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
Novo comportamento de hash binário é demonstrado por esse script.
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
Embora eu não tenha chamado, which cat
sempre retornaria o primeiro cat
no meu PATH, porque ele não usa o hashtable do shell.