Réponses:
Seul un shell intégré indiquera 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 en premier lieu aux fichiers exécutables.
Pour le shell Bourne Again bash, la fonction intégrée est la typecommande:
$ type '['
[ is a shell builtin
Pour la coquille de poissonfishtype ,, le builtin fonctionne de manière similaire à bash. Pour obtenir uniquement le chemin vers un exécutable, utilisez command -v:
$ type cat
cat is /bin/cat
$ command -v cat
/bin/cat
Pour le Korn Shell, ksh, le intégré est la whencecommande - avec d' typeabord mis en place comme un alias ordinaire whence -vet commandintégré avec l' -voption équivalente à whence:
$ whence -v ls
ls is a tracked alias for /bin/ls
Pour la Shell Z, zsh, le intégré est la whencecommande, avec l' commandintégré avec l' -voption équivalente à whenceet les built-ins type, whichet whereéquivalente à whenceavec les options -v, -cet -carespectivement.
$ whence ls
/bin/ls
Pour le shell TC tcsh, la commande intégrée est la whichcommande - à ne pas confondre avec une commande externe de ce nom:
> which ls
ls: aliased to ls-F
> which \ls
/bin/ls
typeest également intégré à zsh?
which-2.19-6.el6.x86_64) place un fichier de démarrage /etc/profile.d/which2.sh. Ceci est lu par des shells non-csh, y compris zsh. Il alias whichà lui-même. Donc, pour les utilisateurs de zsh en particulier, il annule la fonction intégrée which.
Vous pouvez utiliser whichpour cela:
aix@aix:~$ which ls
/bin/ls
Il fonctionne en recherchant les PATHfichiers exécutables correspondant aux noms des arguments. Notez que cela ne fonctionne pas avec les alias de shell:
aix@aix:~$ alias listdir=/bin/ls
aix@aix:~$ listdir /
bin dev initrd.img lib32 media proc selinux tmp vmlinuz
...
aix@aix:~$ which listdir
aix@aix:~$
type, cependant, fonctionne:
aix@aix:~$ type listdir
listdir is aliased to `/bin/ls'
whichn'est pas nécessairement suffisant en soi. Il ne renvoie que le premier nom trouvé dans $ PATH ... Ce nom peut être un lien symbolique, et non l' exécutable de fin de chaîne réel .
whichne renvoie pas (nécessairement) le fichier exécutable. Il renvoie le premier nom de fichier correspondant qu'il trouve dans le $ PATH (ou plusieurs fichiers nommés similaires lors de l'utilisation which -a) ... L' exécutable réel peut être à plusieurs liens.
which locate/usr/bin/locatefile $(which locate)/usr/bin/locate: symbolic link to /etc/alternatives/locate' La commande qui trouve l' exécutable réel 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
Tu peux essayer:
whereis ls
Ça me donne:
ls: /bin/ls /usr/share/man/man1/ls.1.gz