Як `man git init` отримує потрібну сторінку чоловіка?


52

Тож здається, що введення man git initв bash-підказку в системі Ubuntu 14.04 робить те саме man git-init, що я тільки не зовсім впевнений, як.

manСторінка man(тобто man man) , здається, не дозволяє цій конструкцію, якщо gitне було sectionкерівництво, але сторінка людей , здається, виходить з розділу 1.

Чи підтримується це незадокументоване використання man? Я неправильно зрозумів документацію man? Чи відбувається якась інша магія? Комусь хочеться пояснити?


Здається, що git-init може бути просто обгорткою дляgit init
Jeff Schaller

Відповіді:


71

Деякі реалізації man, включаючи ту, яку використовує Ubuntu, замінюють пробіли в пошукових термінах дефісами та намагаються знайти сторінку керівництва під цим іменем. Так man git initшукає те саме, що і man git-init. Аналогічно man run partsі man ntfs 3gробота (якщо у вас є run-partsі ntfs-3gу вашій системі).

Це робиться лише з парами слів, хоча man git annex syncце не працює (хоча man git-annex syncце так, як це знову слово пари).

Насправді, коли ви запитуєте дві сторінки вручну (наприклад, man git bashщоб побачити як git, так і bash manpages), manнасправді спочатку намагається шукати git-bashmanpage. Ви можете бачити це у виводі налагодження, якщо ввімкнути його -d.

Ця людина називається "підсторінки", ви можете прочитати вихідний код, що реалізує підсторінки в man-db (спасибі, Стівен Кітт ). Пошук в man(1)довідкової сторінці для «підсторінки» також приведуть вас до опису цього поведінки по --no-subpagesвибору:

--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

Схоже, це не працює на CentOS 6.6. Це тільки Ubuntu?
Wildcard

1
@Wildcard, яка частина, здається, не працює? Він повинен працювати до тих пір, поки CentOS використовує man-db (є й інші manреалізації), а підсторінки не відключені (наприклад, з --no-subpages). Я використовую Debian, тому це точно не тільки Ubuntu.
дероберт

2
Важливо те, що це унікально для конкретної реалізації man. Це аж ніяк не універсальне чи особливе поширене.
чепнер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.