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
.