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 which
comando aponta para outra versão pip3
localizada, /usr/local/bin
mas o shell ainda se lembra do caminho errado. Como faço para esquecer esse caminho?
O which
manual 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/bin
e /usr/bin
estão na minha PATH
variável, e /usr/local/bin/pip3
não é um link simbólico, é um executável. Então, por que não é executado?
/usr/local/bin/pip3
?pip3
naquele shell enquanto ele estava/usr/bin
e o mudou?hash -t pip3
?hash -t pip3
prints/usr/bin/pip3
type
eatherwhich
.type
é construído em um shell posix e informa o que um shell fará, em vez dewhich
qual tenta adivinhar o que o shell fará.Respostas:
Quando você executa um comando,
bash
ele lembrará a localização desse executável, para que ele não precise pesquisarPATH
novamente a cada vez. Portanto, se você executar o executável, altere o local,bash
ainda tentará usar o local antigo. Você deve poder confirmar isso com ohash -t pip3
que mostrará o local antigo.Se você executá-
hash -d pip3
lo, o bash informará o local antigo e deverá encontrar o novo na próxima vez que tentar.fonte
hash -r
para limpar a mesa inteira.which
.help
em vez do homem, por isso aquihelp hash
type hash
lhe dirá que é um shell embutido, portanto não possui sua própria página de manual. Em vez disso, usehelp hash
ou procurehash
na página de manual do bash.man
... uma vez quehash
é umbash
builtin, você desejaman bash
encontrá-lo. Mas o que a página de manual diz é essencialmente ohelp hash
que bash diz.