Je me demandais ce qui se passe dans la situation suivante. Supposons que j'ai un fichier exécutable dans un répertoire qui se trouve dans PATH dans .bashrc. Si je copie également le fichier dans un autre répertoire défini dans PATH et que je l'utilise à partir du terminal, quelle copie est en cours d'exécution?
Puis-je définir une préférence pour dire «si un fichier existe à plusieurs endroits dans PATH, exécutez-le en premier lieu au lieu de celui en second lieu».
Réponses:
La réponse rapide
Pour savoir quelle copie
bash
va essayer d'exécuter, utilisez l'utilitaire intégré de bashtype
. Pour savoir quelle copie dedu
, par exemple, sera exécuté, exécutez: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:
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:
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:
Une fois l'alias ci-dessus défini, vous pouvez taper
dd
en ligne de commande etbash
va ignorer le cache et ignorer le PATH, et courir (ou essayer de courir)/opt/bin/dd
.la source