Notez qu'il ne s'agit pas d' un doublon. Je demande de désactiver le cache, pas de le vider. Si vous avez un cache à vider, il n'est évidemment pas désactivé.
Les rares fois où je remarque le cache de bash des choses qu'il a trouvées sur le chemin, ce n'est pas parce qu'il est utile, c'est parce que c'est énervant. Un exemple:
~ 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
Dans une autre coquille ...
~ dc$ which which
/usr/bin/which
Je suis sûr que cette mise en cache était logique au bon vieux temps, lorsque les disques étaient lents et que la mémoire était chère et limitée et que vous ne pouviez donc pas beaucoup mettre en cache - la mise en cache d'un chemin est moins chère que la mise en cache de tous les blocs de disque nécessaires pour trouver une commande . Mais de nos jours, il n'offre aucun avantage notable et cause plus de problèmes qu'il n'en résout. C'est une erreur, qui frôle le fait d'être un bug.
Et je ne peux même pas trouver un moyen de le désactiver. Des pointeurs?
/usr/bin
reste entièrement dans le cache.set +h
pour désactiver le hachage.Réponses:
Vous pouvez simplement effacer les exécutables hachés avant que l'invite ne soit dessinée:
De
help hash
:la source
set +h
set +h
n'est pas idéal, comme de nombreux utilitaires (par exemple les installations de rubis gemmes) appellenthash
, produisant des flux d'-bash: hash: hashing disabled
avertissements.Vous pouvez forcer bash à effectuer une nouvelle recherche de chemin au cas où une commande dans la table de hachage n'existe plus.
Depuis la page de manuel de bash:
Exemple:
la source