Bash merkt sich den falschen Pfad zu einer ausführbaren Datei, die verschoben / gelöscht wurde

29

Wenn ich es tue

which pip3

Ich bekomme

/usr/local/bin/pip3

aber wenn ich versuche, auszuführen, pip3erhalte ich eine Fehlermeldung wie folgt:

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

Das liegt daran, dass ich diese Datei kürzlich gelöscht habe. Jetzt whichverweist der Befehl auf eine andere Version pip3, die sich in befindet, /usr/local/binaber die Shell merkt sich immer noch den falschen Pfad. Wie kann ich diesen Pfad vergessen lassen?

Das whichHandbuch sagt

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.

Beide /usr/local/binund /usr/binbefinden sich in meiner PATHVariablen und /usr/local/bin/pip3sind keine symbolische Verknüpfung, sondern eine ausführbare Datei. Warum wird es nicht ausgeführt?

Spinnengesicht
quelle
Was ist der Inhalt von /usr/local/bin/pip3?
Thomas
Waren Sie zuvor pip3in dieser Shell gelaufen , während sie sich in der Shell befand, /usr/binund haben Sie sie dann verschoben?
Eric Renouf
1
Was siehst du, wenn du rennst hash -t pip3?
Eric Renouf
1
@ Eric Renouf hash -t pip3druckt/usr/bin/pip3
Spiderface
2
Sofern Sie keinen sehr guten Grund haben, sollten Sie immer typeeather than verwenden which. typeist in eine Posix-Shell eingebaut und gibt an, was eine Shell tun wird, anstatt whichzu erraten, was die Shell tun wird.
Ikarus

Antworten:

37

Wenn Sie einen Befehl ausführen bash, wird der Speicherort der ausführbaren Datei gespeichert, sodass nicht PATHjedes Mal eine erneute Suche durchgeführt werden muss. Wenn Sie also die ausführbare Datei ausführen und den Speicherort ändern, bashwird weiterhin versucht, den alten Speicherort zu verwenden. Sie sollten in der Lage sein, dies zu bestätigen, hash -t pip3wodurch der alte Ort angezeigt wird.

Wenn Sie ausführen hash -d pip3, wird bash angewiesen, den alten Speicherort zu vergessen und beim nächsten Versuch den neuen zu finden.

Eric Renouf
quelle
4
Oder hash -rum den ganzen Tisch abzuräumen.
Mattdm
Ja, das hat funktioniert. Ich denke, ich werde den Titel der Frage ändern, weil es nichts damit zu tun hat which.
Spiderface
1
@spiderface für die meisten bash-Funktionen ist einfacher zu verwenden helpals man, also hierhelp hash
Eric Renouf
3
@spiderface teilt type hashIhnen mit, dass es sich um eine eingebaute Shell handelt, sodass es keine eigene Manpage gibt. Verwenden Sie stattdessen die Manpage von bash help hashoder hashschlagen Sie sie nach.
DeltaB
1
Oder, wenn Sie wirklich man... verwenden möchten, da hashes sich um ein basheingebautes System handelt, möchten Sie man bashes finden. Aber was die Manpage sagt, ist im Wesentlichen das help hash, was man sagt.
KARTE