Si vous souhaitez savoir quel programme un nom de commande exécutera dans votre session actuelle de Terminal Mac, demandez d'abord à zsh comment il interprète ce nom, puis recherchez des fichiers exécutables dans PATH. Cela a son importance car une commande peut être résolue en un alias ou une fonction shell avant que le shell n'atteigne un fichier. Sur macOS, le shell par défaut de Terminal est zsh, bien qu'un profil Terminal ou un administrateur puisse choisir un autre shell. Guide de Terminal par Apple

Demander à zsh la signification du nom de commande

Dans Terminal, exécutez whence -v avec le nom de la commande, sans arguments susceptibles de l'exécuter. Par exemple :

whence -v python3

Le résultat indique le type de commande que zsh utiliserait : il peut signaler un alias, une fonction, une commande intégrée (builtin) ou une commande externe. S'il indique un alias ou une fonction, le nom n'identifie pas directement l'exécutable qui sera lancé ; l'alias ou la fonction peut se développer en une autre commande ou exécuter plusieurs commandes. zsh documente whence comme un moyen d'indiquer la manière dont un nom serait interprété. Documentation des commandes intégrées du shell zsh

Pour obtenir une étiquette de type compacte, utilisez :

whence -w python3

Si le résultat est function, inspectez la définition avec functions python3. S'il s'agit de alias, inspectez-le avec alias python3. Ces commandes affichent la définition actuelle du shell ; elles n'exécutent pas la cible. Une fonction peut appeler une autre fonction ou un programme externe ; suivez donc la définition jusqu'à ce que vous atteigniez la commande qui effectue le véritable travail.

Trouver des fichiers exécutables dans PATH

Pour trouver le fichier que zsh localiserait via PATH, même lorsqu'un alias ou une fonction masque ce nom, utilisez :

whence -p python3

Pour lister chaque entrée PATH correspondante, utilisez :

whence -pa python3

L'option -p demande à zsh de chercher dans PATH en dépit d'une définition au niveau du shell, et -a renvoie toutes les correspondances plutôt que la première uniquement. La première correspondance dans PATH correspond au fichier exécutable que zsh trouverait lors d'une recherche habituelle de commande externe. zsh peut également afficher la résolution d'un lien symbolique avec whence -ps python3. Documentation des commandes intégrées du shell zsh

La liste PATH appartient à l'environnement du shell actuel. Consultez ses répertoires avec print -r -- $PATH ; zsh présente son paramètre path sous cette forme, en tant que valeur séparée par des deux-points. Un changement dans l'ordre de PATH peut modifier le doublon de nom trouvé en premier. Apple décrit PATH comme une liste de répertoires dans lesquels le shell recherche les commandes, et souligne que les paramètres d'environnement du shell sont propres à leur contexte d'exécution. Apple : Utiliser des variables d’environnement dans Terminal sur Mac

Vérifier la manière dont une commande a été appelée

Une commande écrite avec une barre oblique, telle que ./python3 ou /opt/tools/python3, indique un chemin plutôt que de demander au shell de rechercher le nom dans PATH. Le chemin relatif ./python3 désigne un fichier situé dans le répertoire actuel. Le guide d'initiation à la ligne de commande d'Apple explique qu'un nom sans barre oblique initiale est relatif au répertoire actuel lorsqu'il est employé comme chemin, et que ./ exécute explicitement un programme du répertoire actuel. Apple : Command Line Primer

Pour un nom simple tel que python3, inspectez à la fois son type dans le shell et ses correspondances dans PATH. Pour un chemin contenant /, inspectez précisément ce fichier. Mettez entre guillemets les chemins contenant des espaces ou des métacaractères du shell lorsque vous les exécutez ; par exemple, "/Applications/Tool Folder/tool". Le guide d'initiation d'Apple documente la mise entre guillemets ou l'échappement des caractères spéciaux dans les chemins. Cela permet de localiser le fichier invoqué sans modifier la façon dont la commande est exécutée.

Ce que cette recherche ne peut pas prouver

Une recherche décrit la résolution du shell actuel, et non pas chaque contexte d'exécution. Une autre fenêtre de Terminal peut avoir un PATH ou une configuration de shell différents, et une commande peut se comporter différemment dans un script, un autre shell ou une application lancée hors de Terminal. Apple souligne que les fenêtres de Terminal ne partagent pas leurs environnements shell. Apple : Utiliser des variables d’environnement dans Terminal sur Mac

De plus, trouver un chemin d'accès ne prouve pas en soi qu'il s'agit du processus utilisé en dernier ressort dans chaque situation : le fichier peut être un lien symbolique, un script qui lance un autre programme, ou un lanceur. whence -ps permet de révéler la résolution des liens symboliques, mais tracer le comportement ultérieur d'un script nécessite d'inspecter ce dernier ou la documentation du programme. Si whence -p ne renvoie aucun chemin, ce nom n'a aucune correspondance dans PATH pour ce shell ; il peut toujours s'agir d'un alias, d'une fonction, d'une commande intégrée ou d'une commande accessible uniquement via un chemin explicite.

Pour une vérification de routine, exécutez d'abord whence -v name, inspectez les alias ou fonctions éventuels, puis utilisez whence -pa name pour comparer les candidats exécutables. Cette séquence indique à la fois ce que zsh reconnaît et le fichier que sa recherche dans PATH trouverait.

Sources