Várias instalações e compreensão do $ PATH

17

Eu tenho uma versão mais antiga do Git instalada em:

/usr/bin/

Recentemente, baixei uma versão mais recente para:

/usr/local/bin

Quando digito:

which git

Eu recebo a localização da versão antiga. Eu acredito que isso ocorre apenas porque / usr / bin / aparece antes de / usr / local / bin na minha variável $ PATH e, portanto, a versão mais antiga do git é 'encontrada' primeiro.

Para testar isso, renomei a versão mais antiga do git para "git_old". Agora, quando digito:

which git

Eu obtenho o local da versão mais recente, conforme o esperado. Mas quando eu digito:

git --version

Estou tendo o erro a seguir:

-bash: /usr/bin/git: No such file or directory

Só estou me perguntando por que meu computador está voltando a procurar no Git o antigo local?

user1551817
fonte

Respostas:

30

O Bash armazena em cache o caminho completo dos executáveis, para que ele não precise ser $PATHvisualizado o tempo todo.

Você pode ver o que está no cache usando o hashcomando:

deltik@node51 [~]$ hash
hits    command
   1    /usr/bin/git

Esse cache pode ser limpo com hash -r:

deltik@node51 [~]$ hash -r
deltik@node51 [~]$ hash
hash: hash table empty

Recursos adicionais

Deltik
fonte
2
wtf eu nunca soube disso, incrível.
djsmiley2k - Cow
1
A maioria dos outros shells faz a mesma coisa, mas nem todos são usados hash -rpara recarregar o cache. Cantor, como SSH, usa rehashcomo comando.
Moshe Katz
PATH = $ PATH deve limpar o cache. hash -r não é necessário.
Jrw32982 suporta Monica