J'ai un comportement étrange avec zsh (5.4.2_1 installé avec homebrew) sur osx n'utilisant pas la première occurrence d'un exécutable dans le chemin.
Voici le scénario:
echo $PATH
Retour:
/usr/local/Cellar/zplug/HEAD-9fdb388/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
l'infusion est à la fois
/usr/local/Cellar/zplug/HEAD-9fdb388/bin
et
usr/local/bin/brew
Ceci est confirmé en lançant quel brassage -a qui renvoie:
/usr/local/Cellar/zplug/HEAD-9fdb388/bin/brew
/usr/local/bin/brew
Mais quand je lance quel breuvage il revient:
/usr/local/bin/brew
et l' infusion fonctionne /usr/local/bin/brew
plutôt que/usr/local/Cellar/zplug/HEAD-9fdb388/bin/brew
Comment cela peut-il se produire lorsque l'infusion est plus tôt sur le chemin?
Aide appréciée.
rehash
et exécutez-les à nouveau - si cela se produit encore par la suite, modifiez -le.Réponses:
which -a cmd
recherche tous les fichiers réguliers nomméscmd
lesquels vous disposez des droits d'exécution dans les répertoires$path
(en plus des alias, fonctions, fonctions intégrées ...).While
which cmd
renvoie la commande quizsh
s'exécuterait (which
est une fonction intégréezsh
comme danstcsh
mais contrairement à la plupart des autres shells).zsh
, comme la plupart des autres shells, se souvient des chemins des exécutables dans unehash
table afin de ne pas avoir à les rechercher dans tous les répertoires de$path
chaque fois que vous les appelez.Cette table de hachage (exposée dans le
$commands
tableau associatif danszsh
) peut être manipulée avec lehash
commande (commande shell POSIX standard).Si vous avez exécuté la
brew
commande (ouwhich/type/whence brew
, ou utilisé l'achèvement de la commande ou quoi que ce soit qui aurait amorcé ce hachage / cache) avant son ajout/usr/local/Cellar/zplug/HEAD-9fdb388/bin
ou avant l'/usr/local/Cellar/zplug/HEAD-9fdb388/bin
ajout$path
, sezsh
serait souvenu de son chemin et l'avait stocké sous$commands[brew]=/usr/local/bin/brew
.Dans ce cas, vous pouvez utiliser
hash -r
(comme dans le shell Bourne) ourehash
(comme dans csh) pour avoirzsh
oublié les commandes mémorisées (invalider ce cache ), afin qu'il puisse le rechercher la prochaine fois et le trouver dans le nouvel emplacement.la source
$commands
pas le cas$command
. Voir modifier./usr/local/bin/brew
est généralement un lien symbolique.Alors
/usr/local/bin/brew
et/usr/local/Cellar/zplug/HEAD-9fdb388/bin/brew
sont probablement les mêmes fichiers.
type:
confirmer.
la source