La réponse rapide
Pour savoir quelle copie bash va essayer d'exécuter, utilisez l'utilitaire intégré de bash type. Pour savoir quelle copie de du, par exemple, sera exécuté, exécutez:
$ type du
du is /usr/bin/du
La théorie
Quand vous demandez bash exécuter quelque chose, bash effectue deux étapes:
Tout d'abord, il vérifie dans son cache l'emplacement du fichier. Ceci est une liste de noms de fichiers exécutables et où le fichier a été localisé la dernière fois bash exécuté.
Deuxièmement, si le fichier ne se trouve pas dans le cache, il vérifie le chemin en recherchant chaque répertoire dans le chemin de gauche à droite.
Notez que la réponse dépend alors de l’exécution du fichier exécutable dans le shell actuel avant la copie. Si c'est le cas, bash peut avoir enregistré son emplacement dans le cache et il sera ignorer tous les nouveaux emplacements dans lesquels il peut se trouver après avoir effectué des copies. S'il ne se trouve pas dans le cache, le fichier exécuté dépend uniquement de l'ordre des répertoires dans le chemin.
Plus de détails
Pour voir ce qu'il y a dans le cache actuel de bash, lancez:
$ declare -p BASH_CMDS
declare -A BASH_CMDS='([du]="/usr/bin/du" )'
Ce qui précède montre que seulement du était dans la cache quand j'ai couru ça. Si j'exécutais plus de commandes et que je l'exécutais à nouveau, il y en aurait plus dans le cache.
Pour voir quel est le chemin actuel, lancez:
$ echo $PATH
/bin:/usr/bin:/opt/bin:/usr/local/bin:/usr/X11R6/bin
Le chemin est une liste séparée par deux-points. Ce qui précède montre cinq répertoires dans le chemin. Ils seront recherchés à partir de la gauche et à droite.
Puis-je définir une préférence?
Oui, vous pouvez changer l'ordre des répertoires dans le chemin.
Vous pouvez également définir un alias pour un travail interactif. Par exemple:
$ alias dd=/opt/bin/dd
Une fois l'alias ci-dessus défini, vous pouvez taper dd en ligne de commande et bash va ignorer le cache et ignorer le PATH, et courir (ou essayer de courir) /opt/bin/dd.