Lorsque j'exécute un programme sans spécifier le chemin complet de l'exécutable, et que Bash doit rechercher les répertoires $PATH
pour trouver le binaire, il semble que Bash se souvienne du chemin dans une sorte de cache. Par exemple, j'ai installé une version de Subversion à partir de la source /usr/local
, puis tapé svnsync help
à l'invite Bash. Bash a localisé le binaire /usr/local/bin/svnsync
pour "svnsync" et l'a exécuté. Puis, lorsque j'ai supprimé l'installation de Subversion /usr/local
et que je l'ai ré-exécuté svnsync help
, Bash a répondu:
bash: /usr/local/bin/svnsync: No such file or directory
Mais lorsque je démarre une nouvelle instance de Bash, celle-ci est trouvée et exécutée /usr/bin/svnsync
.
Comment effacer le cache des chemins d'accès aux exécutables?
bash
executable
cache
Daniel Trebbien
la source
la source
Réponses:
bash
met en cache le chemin complet d'une commande. Vous pouvez vérifier que la commande que vous essayez d'exécuter est hachée avec latype
commande:Pour effacer tout le cache:
Ou juste une entrée:
Pour plus d'informations, consultez
help hash
etman bash
.la source
csh
, la commande estrehash
.rehash
commande ci-dessus fonctionne également pourzsh
.hash svnsync
.Pour effacer une seule entrée, vous avez besoin d'un indicateur différent:
L'
-r
indicateur ne prend pas de paramètre et supprimera toujours tout le cache.(Au moins à la bash 3.2.39 sur Debian Lenny)
la source
Il existe des solutions non mentionnées ici.
Vous pouvez désactiver le hachage avec
set +h
ouset +o hashall
help set
dit:Vous pouvez vérifier qu’une commande trouvée dans la table de hachage existe avant de tenter de l’exécuter avec
shopt -s checkhash
help shopt
dit:Vous pouvez lier NAME avec PATH avec
hash -p PATH NAME
ouBASH_CMDS[NAME]=PATH
:Magie:
PATH="$PATH"
effectuehash -r
De
variables.c
:Essayer:
la source
Comme l'utilisateur johntex l' a noté dans un commentaire à la réponse de l'utilisateur Tobu , l'action la plus simple dans Bash consiste à réorganiser uniquement votre programme:
C'est tout.
la source