Wodurch wird der Pfad bestimmt, in dem das System nach einer Datei sucht?

Wodurch wird der Pfad bestimmt, in dem das System nach einer Datei sucht?

Ich versuche zu bekommennpmzu arbeiten. Dabei habe ich anscheinend zwei Versionen davon installiert: Eine beschädigte, die in ~/bin installiert ist, und eine andere, die ich gerade kompiliert und ausgeführt habe, make installum sie in zu speichern /usr/local/bin/npm.

Also habe ich den gesamten Ordner ~/bin nach ~/old/bin verschoben ... aber beim Ausführen npmsucht das System immer noch in ~/bin:

$ which npm
/usr/local/bin/npm
$ alias npm
-bash: alias: npm: not found
$ npm
-bash: /home/ubuntu/bin/npm: No such file or directory
$ echo $PATH
/home/ubuntu/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
$

Was veranlasst Ubuntu, in nach npm zu suchen ~/bin/npm? Ich verwende Ubuntu 11.10. Ich weiß nicht, ob die Frage Ubuntu-spezifisch ist oder nicht, sie kann bei Bedarf nach Askubuntu verschoben werden.

Ich sehe zwar ~/bin im PATH, aber soweit ich das verstehe, bedeutet das nur, dass npm es verwendet hätte, wenn es in ~/bin vorhanden gewesen wäre ... aber warum besteht Bash darauf, speziell dort danach zu suchen? Warum findet es es nicht /usr/local/bin/npm, obwohl der whichBefehl es findet?

Antwort1

Der bisher bekannte Speicherort der ausführbaren Datei wird wahrscheinlich von der Shell gehasht. Das Zurücksetzen des Cache der Shell hash -rsollte das Problem beheben.

Wenn Sie nicht den gesamten Cache zurücksetzen möchten, können Sie die einzelnen Einträge für npmdie Verwendung löschen hash -d npm.

verwandte Informationen