Compilei a última versão do emacs a partir do código fonte (v24.2) porque a versão instalada na minha máquina é (bastante) antiga para mim (v21.3). Eu fiz o de sempre:
$configure --prefix=$HOME
make
make install
Agora estou testando o emacs e percebi que ele ainda lança a versão anterior ... enquanto o meu $HOME/bin
caminho deve substituir o sistema (já que é precedido por $ PATH no meu .bashrc
arquivo).
Meu primeiro pensamento foi ver a which
saída do comando. E surpresa, dá o caminho para o novo emacs. Não consigo entender onde está a discrepância aqui. Na mesma sessão, aqui estão as diferentes saídas:
$ emacs --version
GNU Emacs 21.3.1
$ `which emacs` --version
GNU Emacs 24.2.1
Não tenho pseudônimo envolvendo emacs. Em absoluto.
$ alias | grep emacs
$
Alguma idéia do que está acontecendo, por favor?
Respostas:
As três possibilidades que me vêm à mente:
emacs
(que você verificou)emacs
emacs
binário não está na hashtable PATH do seu shell.Você pode verificar se possui uma função
emacs
:E remova-o:
Seu shell também possui uma hashtable PATH que contém uma referência a cada binário no seu PATH. Se você adicionar um novo binário com o mesmo nome que um existente em outro lugar no seu PATH, o shell precisará ser informado atualizando a hashtable:
Explicação adicional:
which
não sabe sobre funções, pois não é um bash embutido:O novo comportamento de hashtable binário é demonstrado por este script.
Embora eu não o chamasse,
which cat
sempre retornaria o primeirocat
no meu PATH, porque ele não usa a hashtable do shell.fonte
type
comando.hash -r
corrigiu meu problema.Sim, não use qual :
PATH
.Há um builtin para isso. Dois, pares:
type
ecommand
. A maneira POSIX:No bash, você também pode usar
type -p emacs
para ver apenas o caminho de um comando externo.No entanto, aqui,
which
está realmente certo. O Bash mantém informações sobre a localização de um comando na memória, para que ele possa executar o comando mais rapidamente na próxima vez. Você instalou um novoemacs
executável no seuPATH
, mas o bash ainda possui o local antigo em seu cache. Executehash emacs
para procuraremacs
novamente ouhash -r
esvaziar o cache.fonte
Você efetuou logout e login para fazer com que seu
.bashrc
arquivo de login atualizado seja relido? Caso contrário, o ambiente da sua sessão atual não foi atualizado.fonte
`which emacs` --version
concordaria comemacs --version
, porquewhich
herda seu PATH do shell atual.