Avez-vous un autre fichier exécutable du même nom ailleurs dans votre $PATH
? Si c'est le cas, il est possible que bash exécute le mauvais exécutable car il utilise une table de hachage pour éviter les recherches supplémentaires (voir Command Search and Execution). Par exemple, supposons que votre $PATH
soit /opt/local/bin:/usr/bin
et que grep
soit installé dans /usr/bin
. Lorsque vous exécutez grep
, vous obtenez le résultat évident:
$ echo $PATH
/opt/local/bin:/usr/bin
$ which grep
/usr/bin/grep
$ grep --version
grep (GNU grep) 2.5.1
Supposons maintenant que vous installez une version plus récente de grep
dans /opt/local/bin
, qui est plus tôt dans votre $PATH
que /usr/bin
. Parce que which
fait toujours la pleine $PATH
recherche chaque fois, mais bash conserve une table de hachage, bash pense toujours que la commande grep
cartes à celui /usr/bin
:
$ which grep
/opt/local/bin/grep
$ grep --version
grep (GNU grep) 2.5.1
$ /opt/local/bin/grep --version
GNU grep 2.6.3
Vous pouvez utiliser le type
builtin pour diagnostiquer ce problème. type
vous dira si une commande est un shell intégré, un alias, une fonction, un mot-clé ou un fichier exécutable. Si ce dernier, il vous indique le chemin d'accès complet à l'exécutable:
$ type grep
grep is hashed (/usr/bin/grep)
Alors, comment vous résoudre ce problème? Vous pouvez utiliser le code interne hash
pour manipuler la table de hachage (tapez help hash
pour plus d'informations). Si vous voulez juste corriger une entrée (grep
dans ce cas), vous pouvez faire hash -d grep
pour dire "supprimer l'entrée de table de hachage pour grep
", auquel cas la prochaine fois que vous exécuterez grep
, il recherchera le $PATH
comme prévu. Si vous voulez effacer toute la table de hachage (par exemple, si vous venez d'installer une grande quantité de nouveaux logiciels ou si vous avez changé votre $PATH
), utilisez hash -r
pour le vider.
Quel est le nom de l'exécutable? En supposant que c'est a.out, quelle est la sortie de pwd && ./a.out. (./ est important pour s'assurer que ce n'est pas un problème PATH) –
le nom de cet exécutable est "qact" – Johnyy