O Bash lembra o caminho errado de um executável que foi movido / excluído

29

Quando eu faço

which pip3

eu recebo

/usr/local/bin/pip3

mas quando tento executar pip3, recebo um erro da seguinte maneira:

bash: /usr/bin/pip3: No such file or directory

Isso ocorre porque eu excluí recentemente esse arquivo. Agora, o whichcomando aponta para outra versão pip3localizada, /usr/local/binmas o shell ainda se lembra do caminho errado. Como faço para esquecer esse caminho?

O whichmanual diz

which returns the pathnames of the files (or links) which would be executed in the current environment, had its arguments been given as commands in
       a strictly POSIX-conformant shell.  It does this by searching the PATH for executable files matching the names of the arguments. It does not follow
       symbolic links.

Ambos /usr/local/bine /usr/binestão na minha PATHvariável, e /usr/local/bin/pip3não é um link simbólico, é um executável. Então, por que não é executado?

spiderface
fonte
Qual é o conteúdo de /usr/local/bin/pip3?
Thomas
Você já havia executado pip3naquele shell enquanto ele estava /usr/bine o mudou?
Eric Renouf
1
O que você vê se você correr hash -t pip3?
Eric Renouf
1
@Eric Renouf hash -t pip3prints/usr/bin/pip3
spiderface
2
A menos que você tenha uma boa razão, use sempre o typeeather which. typeé construído em um shell posix e informa o que um shell fará, em vez de whichqual tenta adivinhar o que o shell fará.
icarus

Respostas:

37

Quando você executa um comando, bashele lembrará a localização desse executável, para que ele não precise pesquisar PATHnovamente a cada vez. Portanto, se você executar o executável, altere o local, bashainda tentará usar o local antigo. Você deve poder confirmar isso com o hash -t pip3que mostrará o local antigo.

Se você executá- hash -d pip3lo, o bash informará o local antigo e deverá encontrar o novo na próxima vez que tentar.

Eric Renouf
fonte
4
Ou hash -rpara limpar a mesa inteira.
mattdm
Sim, isso funcionou. Acho que vou mudar o título da pergunta, porque não tem nada a ver which.
spiderface
1
@spiderface para a maioria do bash apresenta é mais fácil de usar helpem vez do homem, por isso aquihelp hash
Eric Renouf
3
O @spiderface type hashlhe dirá que é um shell embutido, portanto não possui sua própria página de manual. Em vez disso, use help hashou procure hashna página de manual do bash.
Deltab
1
Ou, se você realmente deseja usar man... uma vez que hashé um bashbuiltin, você deseja man bashencontrá-lo. Mas o que a página de manual diz é essencialmente o help hashque bash diz.
MAP