Wenn ich es tue
which pip3
Ich bekomme
/usr/local/bin/pip3
aber wenn ich versuche, auszuführen, pip3
erhalte 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 which
verweist der Befehl auf eine andere Version pip3
, die sich in befindet, /usr/local/bin
aber die Shell merkt sich immer noch den falschen Pfad. Wie kann ich diesen Pfad vergessen lassen?
Das which
Handbuch 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/bin
und /usr/bin
befinden sich in meiner PATH
Variablen und /usr/local/bin/pip3
sind keine symbolische Verknüpfung, sondern eine ausführbare Datei. Warum wird es nicht ausgeführt?
/usr/local/bin/pip3
?pip3
in dieser Shell gelaufen , während sie sich in der Shell befand,/usr/bin
und haben Sie sie dann verschoben?hash -t pip3
?hash -t pip3
druckt/usr/bin/pip3
type
eather than verwendenwhich
.type
ist in eine Posix-Shell eingebaut und gibt an, was eine Shell tun wird, anstattwhich
zu erraten, was die Shell tun wird.Antworten:
Wenn Sie einen Befehl ausführen
bash
, wird der Speicherort der ausführbaren Datei gespeichert, sodass nichtPATH
jedes Mal eine erneute Suche durchgeführt werden muss. Wenn Sie also die ausführbare Datei ausführen und den Speicherort ändern,bash
wird weiterhin versucht, den alten Speicherort zu verwenden. Sie sollten in der Lage sein, dies zu bestätigen,hash -t pip3
wodurch 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.quelle
hash -r
um den ganzen Tisch abzuräumen.which
.help
als man, also hierhelp hash
type hash
Ihnen mit, dass es sich um eine eingebaute Shell handelt, sodass es keine eigene Manpage gibt. Verwenden Sie stattdessen die Manpage von bashhelp hash
oderhash
schlagen Sie sie nach.man
... verwenden möchten, dahash
es sich um einbash
eingebautes System handelt, möchten Sieman bash
es finden. Aber was die Manpage sagt, ist im Wesentlichen dashelp hash
, was man sagt.