Comment `man git init` obtient-il la bonne page de manuel?

52

Il semble donc que taper man git initdans une invite bash sur un système Ubuntu 14.04 fasse la même chose man git-init, sauf que je ne sais pas trop comment.

La manpage pour man(c.-à-d. man man) Ne semble pas autoriser cette construction, à moins qu’elle ne gitfigure sectiondans le manuel, mais la page de manuel semble provenir de la section 1.

Est-ce une utilisation non documentée supportée par man? Ai-je mal compris la documentation man? Est-ce qu'une autre magie se passe? Quelqu'un veut expliquer?

mc0e
la source
Apparaît comme si git-init pouvait n'être qu'un emballage pourgit init
Jeff Schaller

Réponses:

71

Certaines implémentations de man, y compris celle utilisée par Ubuntu, remplacent les espaces dans ses termes de recherche par des traits d'union et tentent de trouver une page de manuel sous ce nom. Alors man git initcherche la même chose que man git-init. De même, man run partset au man ntfs 3gtravail (si vous avez run-partset ntfs-3gsur votre système).

Cependant, cela man git annex syncne fonctionne qu'avec des paires de mots, donc cela ne fonctionne pas (bien que man git-annex synccela fonctionne, car c'est encore une paire de mots).

En fait, lorsque vous demandez deux pages de manuel (par exemple, man git bashpour afficher à la fois les pages de manuel git et bash), vous devez d' manabord rechercher une git-bashpage de manuel. Vous pouvez le voir dans la sortie de débogage si vous l'activez avec -d.

Cette fonctionnalité est appelée "sous-pages". Vous pouvez lire le code source implémentant des sous-pages dans man-db (merci, Stephen Kitt ). La recherche de "sous-pages" dans la man(1)page de manuel vous mènera également à la description de ce comportement dans l' --no-subpagesoption:

--no-subpages
      By default, man will try to interpret pairs of manual page
      names given on the command line as equivalent to a single
      manual page name containing a hyphen or an underscore.  This
      supports the common pattern of programs that implement a
      number of subcommands, allowing them to provide manual pages
      for each that can be accessed using similar syntax as would be
      used to invoke the subcommands themselves.  For example:

        $ man -aw git diff
        /usr/share/man/man1/git-diff.1.gz

      To disable this behaviour, use the --no-subpages option.

        $ man -aw --no-subpages git diff
        /usr/share/man/man1/git.1.gz
        /usr/share/man/man3/Git.3pm.gz
        /usr/share/man/man1/diff.1.gz
derobert
la source
Cela semble ne pas fonctionner sur CentOS 6.6. Est-ce Ubuntu seulement?
Wildcard
1
@Wildcard quelle partie ne semble pas fonctionner? Cela devrait fonctionner aussi longtemps que CentOS utilise man-db (il existe d'autres manimplémentations) et les sous-pages n'ont pas été désactivées (par exemple, avec --no-subpages). J'utilise Debian, donc ce n'est certainement pas uniquement Ubuntu.
derobert
2
La chose importante est que cela est unique à une implémentation spécifique de man. Ce n'est nullement universel ni particulier commun.
Chepner