In che modo `man git init` ottiene la pagina man giusta?


52

Quindi sembra che digitare man git initun prompt bash su un sistema Ubuntu 14.04 faccia lo stesso man git-init, solo che non sono del tutto sicuro di come.

La manpagina per man(cioè man man) non sembra consentire questo costrutto, a meno che non gitfosse una sectiondel manuale, ma la pagina man sembra provenire dalla sezione 1.

Questo è un utilizzo non documentato supportato da man? Ho frainteso la documentazione di man? Sta succedendo qualche altra magia? Qualcuno ha cura di spiegare?


Sembra che git-init possa essere solo un wrapper pergit init
Jeff Schaller

Risposte:


71

Alcune implementazioni di man, tra cui quella utilizzata da Ubuntu, sostituiscono gli spazi nei suoi termini di ricerca con trattini e tentano di trovare una pagina di manuale con quel nome. Quindi man git initcerca la stessa cosa di man git-init. Allo stesso modo, man run partse man ntfs 3gfunziona (se hai run-partse ntfs-3gsul tuo sistema).

Lo fa solo con coppie di parole, tuttavia, quindi man git annex syncnon funziona (anche se man git-annex syncfunziona, poiché questa è di nuovo una coppia di parole).

In effetti, quando chiedi due pagine di manuale (ad esempio, man git bashper vedere entrambe le manpage git e bash), in manrealtà cerca prima di cercare una git-bashmanpage. Puoi vederlo nell'output di debug se lo abiliti con -d.

Questa funzione man si chiama "sottopagine" è possibile leggere il codice sorgente implementando sottopagine in man-db (grazie, Stephen Kitt ). La ricerca nella " man(1)manpage " di "sottopagine" porta anche alla descrizione di questo comportamento sotto l' --no-subpagesopzione:

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

Questo sembra non funzionare su CentOS 6.6. È solo Ubuntu?
Wildcard il

1
@Wildcard quale parte sembra non funzionare? Dovrebbe funzionare finché CentOS utilizza man-db (ci sono altre manimplementazioni) e le sottopagine non sono state disabilitate (ad es. Con --no-subpages). Sto usando Debian, quindi sicuramente non è solo Ubuntu.
derobert,

2
L'importante è che questo sia unico per un'implementazione specifica di man. Non è affatto comune universale o particolare.
Chepner,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.