La commande à utiliser varie d'un shell à l'autre.
Seul un shell intégré vous dira correctement ce que le shell fera pour un nom de commande donné, car seuls les intégrés peuvent connaître pleinement les alias, les fonctions du shell, les autres intégrés, etc. N'oubliez pas :toutes les commandes ne correspondent pas à des fichiers exécutables.
-
Pour le shell Bourne Again,
bash
, l'intégré est letype
commande :$ type '[' [ is a shell builtin
-
Pour la coquille de poisson,
fish
, Letype
builtin fonctionne de la même manière que bash. Pour obtenir uniquement le chemin d'accès à un exécutable, utilisezcommand -v
:$ type cat cat is /bin/cat $ command -v cat /bin/cat
-
Pour le Korn Shell,
ksh
, l'intégré est lewhence
commande — avectype
initialement configuré comme un alias ordinaire pourwhence -v
et lecommand
intégré avec le-v
option équivalente àwhence
:$ whence -v ls ls is a tracked alias for /bin/ls
-
Pour la coque Z,
zsh
, l'intégré est lewhence
commande, avec lecommand
intégré avec le-v
option équivalente àwhence
et les éléments intégréstype
,which
, etwhere
équivalent àwhence
avec les options-v
,-c
, et-ca
respectivement.$ whence ls /bin/ls
-
Pour le T C Shell,
tcsh
, l'intégré est lewhich
command — à ne pas confondre avec une commande externe portant ce nom :> which ls ls: aliased to ls-F > which \ls /bin/ls
Autres lectures
- https://unix.stackexchange.com/questions/85249/
Vous pouvez utiliser which
pour cela :
[email protected]:~$ which ls
/bin/ls
Cela fonctionne en recherchant le PATH
pour les fichiers exécutables correspondant aux noms des arguments. Notez que cela ne fonctionne pas avec les alias du shell :
[email protected]:~$ alias listdir=/bin/ls
[email protected]:~$ listdir /
bin dev initrd.img lib32 media proc selinux tmp vmlinuz
...
[email protected]:~$ which listdir
[email protected]:~$
type
, cependant, fonctionne :
[email protected]:~$ type listdir
listdir is aliased to `/bin/ls'
which
n'est pas (nécessairement) renvoie le fichier exécutable. Il renvoie le premier fichier correspondant nom il trouve dans le $PATH (ou plusieurs fichiers nommés similaires lors de l'utilisation de which -a
)... Le réel exécutable peut être plusieurs liens.
which locate
/usr/bin/locate
`file $(which locate)
/usr/bin/locate: symbolic link to /etc/alternatives/locate'
La commande qui trouve le réel l'exécutable est readlink -e
,
(en conjonction avec which
)
readlink -e $(which locate)
/usr/bin/mlocate
Pour voir tous les liens intermédiaires :
f="$(which locate)" # find name in $PATH
printf "# %s\n" "$f"
while f="$(readlink "$f")" ;do # follow links to executable
printf "# %s\n" "$f"
done
# /usr/bin/locate
# /etc/alternatives/locate
# /usr/bin/mlocate