Beachten Sie, dass dies kein Duplikat ist. Ich frage nach dem Deaktivieren des Caches, nicht nach dem Löschen. Wenn Sie einen Cache löschen müssen, ist dieser offensichtlich nicht deaktiviert.
In den seltenen Fällen, in denen ich Bashs Cache mit Dingen bemerke, die er im Pfad gefunden hat, liegt es nicht daran, dass es hilfreich ist, sondern daran, dass es verdammt nervig ist. Ein Beispiel:
~ dc$ export PATH=$HOME/bin:$PATH
~ dc$ cat bin/which
#!/bin/bash
echo "my which"
~ dc$ which
my which
~ dc$ rm bin/which
~ dc$ which which
-bash: /Users/dc/bin/which: No such file or directory
In einer anderen Hülle ...
~ dc$ which which
/usr/bin/which
Ich bin mir sicher, dass dieses Caching in den guten alten Zeiten Sinn machte, als die Festplatten langsam und der Speicher teuer und begrenzt waren und Sie daher nicht viel zwischenspeichern konnten. Das Zwischenspeichern eines Pfads ist billiger als das Zwischenspeichern aller Festplattenblöcke, die zum Auffinden eines Befehls erforderlich sind . Aber heutzutage bietet es keinen spürbaren Nutzen und verursacht mehr Probleme als es löst. Es ist eine Fehlfunktion, die fast ein Fehler ist.
Und ich kann nicht einmal einen Weg finden, es zu deaktivieren. Irgendwelche Hinweise?
/usr/bin
vollständig im Cache verbleibt.set +h
diese Option, um das Hashing zu deaktivieren.Antworten:
Sie können die gehashten ausführbaren Dateien einfach löschen, bevor die Eingabeaufforderung gezeichnet wird:
Von
help hash
:quelle
set +h
set +h
ist nicht ideal, da viele Dienstprogramme (z. B. Ruby Gem-Installationen) aufrufenhash
und Warnströme erzeugen-bash: hash: hashing disabled
.Sie können bash zwingen, eine neue Pfadsuche durchzuführen, falls ein Befehl in der Hash-Tabelle nicht mehr vorhanden ist.
Aus der Bash-Manpage:
Beispiel:
quelle