Par exemple,
[fakename]$ type echo
echo is a shell builtin
Mais man echo
me donne la version GNU coreutils de echo
. Quel est le moyen le plus simple de savoir si la page de manuel que je consulte est la bonne, c'est-à-dire celle de l'utilitaire que j'obtiendrais si je l'invoquais directement ?
Réponse acceptée :
Vous ne le faites pas, vraiment. Non sans connaissances externes à la page de manuel.
Dans le cas de echo
(et printf
, et test
, …), il s'agit souvent d'un shell intégré, vous devrez donc le savoir et lire la documentation du shell. (Et echo
est notoirement différent dans différentes implémentations, utilisez printf
à la place.)
Dans la plupart, sinon tous les shells, vous pouvez trouver si quelque chose est une commande intégrée avec type command
, par exemple. type echo
affichera echo is a shell builtin
. (type
est spécifié par POSIX mais par ex. fish le supporte aussi, aussi non-POSIXy soit-il.) Dans Bash, vous lirez alors man bash
, la documentation en ligne ou utilisez la commande intégrée help
(qui est spécifique à Bash, et dont vous devez connaître l'existence).
Même si la commande n'est pas un builtin, il est possible qu'il y ait plusieurs commandes avec le même nom, rename
étant un exemple célèbre (voir Pourquoi l'utilitaire de renommage sur Debian/Ubuntu est-il différent de celui sur d'autres distributions, comme CentOS ?). Maintenant, votre système d'exploitation doit avoir la page de manuel correcte pour l'utilitaire réellement installé, et par exemple. dans Debian, le système « alternatives » met également à jour les pages de manuel correspondantes lorsque les alternatives de commande sont modifiées. Mais si vous lisez une page de manuel en ligne, vous devez en être conscient.
De nombreux utilitaires ont une option de ligne de commande comme --version
qui pourrait vous dire quelle est l'implémentation de cette commande. (Mais presque tous les utilitaires ne l'ont pas. Je pense que c'est un GNUisme à l'origine, donc les utilitaires GNU l'ont, ainsi que ceux qui ont copié la coutume.) Dans le cas de rename
, il se trouve que cela fonctionne en distinguant deux implémentations différentes :
debian$ rename --version
/usr/bin/rename using File::Rename version 0.20
centos$ rename --version
rename (util-linux-ng 2.17.2)
En plus de cela, votre système peut avoir un alias ou une fonction avec le même nom d'un utilitaire, généralement pour modifier le comportement de l'utilitaire. Dans ce cas, les valeurs par défaut présentées dans une page de manuel peuvent ne pas s'appliquer. Alias pour ls
sont courants, tout comme les alias ajoutant -i
à rm
ou mv
. Mais type foo
vous dira aussi si foo
est un alias ou une fonction.