`man git init` 如何获得正确的手册页?

mc0*_*c0e 53 man

因此,man git init在 Ubuntu 14.04 系统上输入bash 提示符似乎与 相同man git-init,只是我不太确定如何。

(ie )的man页面似乎不允许这种构造,除非是手册的 a ,但手册页似乎来自 section 。manman mangitsection1

这是man?支持的未记录用法?我误解了 的文档man吗?是否有其他魔法发生?有人愿意解释吗?

der*_*ert 72

的某些实现man,包括 Ubuntu 使用的实现,将搜索词中的空格替换为连字符,并尝试在该名称下查找手册页。所以man git init寻找与man git-init. 同样,man run partsman ntfs 3g工作(如果你有run-partsntfs-3g您的系统上)。

但是,它只对单词对执行此操作,因此man git annex sync不起作用(尽管man git-annex sync可以,因为这又是一个单词对)。

事实上,当您要求两个手册页(例如,man git bash同时查看 git 和 bash 手册页)时,man实际上首先会尝试查找手册git-bash页。如果使用-d.

此 man 功能称为“子页面”,您可以阅读在 man-db 中实现子页面源代码(感谢Stephen Kitt)。搜索“子页面”的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
Run Code Online (Sandbox Code Playgroud)

  • 重要的是,这是`man` 的*特定* 实现所独有的。它绝不是普遍的或特别普遍的。 (2认同)