Wann sollten ausführbare Dateien in $ PATH mit bash erneut aufbereitet werden?

9

Die Bash-Shell verfügt über einen integrierten Befehl hash -rzum Zurücksetzen des internen $PATHCaches für ausführbare Dateien.

Wann muss dieser Befehl verwendet werden?

Verwandte: Wie man ausführbare Dateien in $ PATH mit bash erneut aufbereitet

Kevinarpe
quelle
1
... zum Beispiel, wenn Sie ein Programm haben, das Sie gerade neu kompiliert haben ... mit demselben Namen ... vielleicht auf einem anderen Weg ...
Hastur
@ Hastur: Ich bin mir nicht sicher, ob Ihr Kommentar eine Frage oder eine Aussage ist. Wenn Aussage, bitte als Antwort posten.
Kevinarpe

Antworten:

7

hashist ein in bash integrierter Befehl. Die Hash-Tabelle ist eine Funktion von bash, die verhindert, dass jedes Mal, wenn Sie einen Befehl eingeben, $ PATH durchsucht werden muss, indem die Ergebnisse im Speicher zwischengespeichert werden.

Wenn die zwischengespeicherten / gespeicherten Informationen nicht mehr aktualisiert oder gültig sind, müssen Sie sie möglicherweise zurücksetzen.

Lesen Sie mehr über diese nette Antwort auf Unix Stackexchange .

Hastur
quelle
4

Wenn Sie zuvor ein Programm in diesem Shell-Aufruf ausgeführt und dann eine andere Version davon in einem früheren Verzeichnis in Ihrer $PATHSuchliste installiert haben , müssen Sie den Hash zurücksetzen, damit er am neuen Speicherort gefunden wird. Andernfalls wird der Cache verwendet, um das Programm am alten Speicherort zu finden.

Sie müssen den Hash auch zurücksetzen, wenn ein Programm in 2 Verzeichnissen in Ihrem installiert ist $PATH, und Sie entfernen die Kopie vom früheren Speicherort, nachdem Sie sie ausgeführt haben. Andernfalls wird versucht, es an diesem Speicherort zu finden und "Keine solche Datei oder kein solches Verzeichnis" zu melden (ich persönlich denke, es sollte den Hash automatisch löschen und eine vollständige Suche durchführen, wenn dies passiert, aber es ist nicht passiert, als ich es versucht habe ).

Beachten Sie, dass Sie nicht den gesamten Hash zurücksetzen müssen. Sie können Folgendes verwenden:

hash name

um zu erzwingen, dass der Cache-Eintrag nur für diesen Namen aktualisiert wird, oder:

hash -d name

um nur diesen Cache-Eintrag zu löschen. Diese lassen alle anderen Cache-Einträge in Ruhe.

Sie müssen es hash -rnach dem Ändern nicht mehr verwenden $PATH, es wird automatisch zurückgesetzt, wenn dies erledigt ist.

Barmar
quelle
Guter Punkt über das Installationsteil und den Punkt in Ihrem Pfad.
Kevinarpe