Quand ressasser les exécutables dans $ PATH avec bash?

9

Le shell Bash a une commande intégrée hash -rpour réinitialiser le $PATHcache interne des exécutables.

Quand est-il nécessaire d'utiliser cette commande?

En relation: Comment ressasser les exécutables dans $ PATH avec bash

kevinarpe
la source
1
... par exemple quand vous avez un programme que vous venez de recompiler ... avec le même nom ... peut-être dans un chemin différent ...
Hastur
@Hastur: Je ne sais pas si vous commentez est une question ou une déclaration. Si déclaration, veuillez poster comme réponse.
kevinarpe

Réponses:

7

hashest une commande bash intégrée. La table de hachage est une fonctionnalité de bash qui l'empêche d'avoir à rechercher $ PATH chaque fois que vous tapez une commande en mettant en cache les résultats en mémoire.

Ainsi, lorsque les informations mises en cache / stockées ne sont plus mises à jour ou valides, vous devrez peut-être les réinitialiser.

En savoir plus sur cette belle réponse sur Unix stackexchange .

Hastur
la source
4

Si vous avez précédemment exécuté un programme dans cette invocation de shell, puis installé une autre version de celui-ci dans un répertoire antérieur de votre $PATHliste de recherche, vous devez réinitialiser le hachage afin qu'il le trouve au nouvel emplacement. Sinon, il utilisera le cache pour trouver le programme à l'ancien emplacement.

Vous devez également réinitialiser le hachage si un programme est installé dans 2 répertoires de votre $PATH, et vous supprimez la copie de l'emplacement précédent après l'avoir exécuté. Sinon, il essaiera de le trouver à cet emplacement et signalera "Aucun fichier ou répertoire" (personnellement, je pense qu'il devrait automatiquement effacer le hachage et effectuer une recherche complète lorsque cela se produit, mais cela ne s'est pas produit lorsque j'ai essayé ).

Notez que vous n'avez pas besoin de réinitialiser l'intégralité du hachage, vous pouvez utiliser:

hash name

pour le forcer à mettre à jour l'entrée de cache uniquement pour ce nom, ou:

hash -d name

pour supprimer uniquement cette entrée de cache. Ceux-ci laissent toutes les autres entrées de cache seules.

Vous n'avez pas besoin d'utiliser hash -raprès la modification $PATH, il est réinitialisé automatiquement lorsque cela est fait.

Barmar
la source
Bon point sur la partie d'installation et le point sur votre chemin.
kevinarpe