Por que existem caminhos diferentes para um comando na seção Sinopse de uma Página Man?

4

Olhando a página do manual para grep , notei que existem dois caminhos diferentes para o comando. Isso significa que eu tenho várias ferramentas grep no meu sistema? As linhas de sinopse que possuem o mesmo caminho são apenas exemplos de uso diferentes da mesma ferramenta? Estou usando OS X 10.10.5

NAME
     grep - search a file for a pattern

SYNOPSIS
     /usr/bin/grep [-bchilnsvw] limited-regular-expression
          [filename]...

     /usr/xpg4/bin/grep [-E | -F] [-c | -l | -q] [-bhinsvx] -e pattern_list...
          [-f pattern_file]... [file]...

     /usr/xpg4/bin/grep [-E | -F] [-c | -l | -q] [-bhinsvx]
          [-e pattern_list]... -f pattern_file... [file]...

     /usr/xpg4/bin/grep [-E | -F] [-c | -l | -q] [-bhinsvx] pattern
          [file]...

DESCRIPTION
     The grep utility searches  text  files  for  a  pattern  and
     prints  all lines that contain that pattern.  It uses a com-
     pact non-deterministic algorithm.

Uma pergunta de acompanhamento: de onde vêm as páginas do manual? Eles são gerados dinamicamente ou são parte de uma instalação estática?

    
por SheepPlusPlus 28.06.2017 / 19:43

2 respostas

5

Você diz que está em uma máquina do MacOS, mas o manual parece suspeito como o grep manual em uma máquina Solaris . Aqui está o manual para grep no OSX 10.9 para comparação .

No Solaris, existem vários utilitários com várias implementações e grep é um deles. Os que estão em /usr/bin aderem ao XPG3, abreviação de "X / Open Portability Guide, Issue 3". A Única Especificação Unix é baseada no XPG4 (ref: Artigo do Wikipedia X / Open )

O XPG3 grep em /usr/bin , por exemplo, não suporta expressões regulares estendidas, enquanto o XPG4 grep em /usr/xpg4/bin faz.

Se um utilitário tiver várias linhas de sinopse em seu manual, elas geralmente descrevem maneiras mutuamente exclusivas de invocar a ferramenta.

Estes:

/usr/xpg4/bin/grep [-E | -F] [-c | -l | -q] [-bhinsvx] -e pattern_list...
      [-f pattern_file]... [file]...

 /usr/xpg4/bin/grep [-E | -F] [-c | -l | -q] [-bhinsvx]
      [-e pattern_list]... -f pattern_file... [file]...

.. mostre que você pode usar -e ou -f (ou ambos) mas que você deve usar um deles.

O último,

 /usr/xpg4/bin/grep [-E | -F] [-c | -l | -q] [-bhinsvx] pattern
      [file]...

... mostra que se você não usar nem -e nem -f , então o pattern precisa ser especificado na linha de comando.

Veja também standards(5) no Solaris .

Os manuais são instalados "estaticamente", ou seja, como arquivos separados que o comando man lê e exibe. No entanto, dependendo do sistema, alguns deles podem ser groff ou mandoc arquivos de origem, enquanto outros podem ser pré-formatados como arquivos de texto, às vezes armazenados em um diretório secundário dos manuais não formatados, geralmente chamados de cat . Às vezes eles também podem ser comprimidos. Leia o manual man em seu sistema ( man man ) para ver como os manuais são manipulados lá.

Na maioria das vezes, os manuais podem ser encontrados em /usr/share/man , /usr/local/share/man ou em algum desses locais.

    
por 28.06.2017 / 21:03
2

As páginas de manual são formatadas dinamicamente, mas o conteúdo é estático. Sua configuração, incluindo a localização das páginas de manual pré-formatadas, é normalmente definida em /etc/man.conf .

Na parte relevante da minha máquina MacOS:

# Every automatically generated MANPATH includes these fields
#
MANPATH   /usr/share/man
MANPATH   /usr/local/share/man
MANPATH   /usr/X11/man
#
# Uncomment if you want to include one of these by default
#
# MANPATH /opt/*/man
# MANPATH /usr/lib/*/man
# MANPATH /usr/share/*/man
# MANPATH /usr/kerberos/man
#
# Set up PATH to MANPATH mapping
#
# If people ask for "man foo" and have "/dir/bin/foo" in their PATH
# and the docs are found in "/dir/man", then no mapping is required.
#
# The below mappings are superfluous when the right hand side is
# in the mandatory manpath already, but will keep man from statting
# lots of other nearby files and directories.
#
MANPATH_MAP   /bin            /usr/share/man
MANPATH_MAP   /sbin           /usr/share/man
MANPATH_MAP   /usr/bin        /usr/share/man
MANPATH_MAP   /usr/sbin       /usr/share/man
MANPATH_MAP   /usr/local/bin      /usr/local/share/man
MANPATH_MAP   /usr/local/sbin     /usr/local/share/man
MANPATH_MAP   /usr/X11/bin        /usr/X11/man
MANPATH_MAP   /usr/bin/X11        /usr/X11/man
MANPATH_MAP   /usr/bin/mh     /usr/share/man

Então, olhando em /usr/share/man/man1 , vejo grep.1 , que define o conteúdo da página de manual para grep(1) .

    
por 28.06.2017 / 19:49