Lendo e pesquisando longas páginas man

28

Eu finalmente me cansei quando queria ler sobre a opção read do bash e a opção -s com man bash . Eu encontrei o ponto certo eventualmente (em torno da linha 4500), mas foi frustrante, como de costume, já que as buscas /read e mesmo /\s-s\s têm muitas correspondências.

Portanto, a pergunta é: Como posso ler páginas de manual longas de maneira eficiente ou obter as mesmas informações de outras maneiras, localmente ? Como um exemplo específico, como acessar a documentação relevante depois de ver read -s pwd em um script de shell? Uma boa resposta pode ser um trecho de script de shell, ou uma dica sobre alguma ferramenta e como ela é usada, ou algo totalmente diferente, desde que ajude a encontrar o ponto certo para ler.

Observação: não estou marcando com porque quero que pergunta ser sobre a leitura de páginas de manual em geral, apesar de que, possivelmente, é a página do homem mais comumente encontrada.

    
por hyde 15.10.2013 / 10:17

9 respostas

29

Para obter ajuda rapidamente em um Bash incorporado, use help :

help read

é o que você quer.

Para formatação semelhante a uma página man, use

help -m read

ou, melhor ainda,

help -m read | less

Se você ainda insistir em procurá-lo na man page, eu acho que o que me leva rapidamente a uma explicação do comando é

/^\s*read [[]

Isso funciona porque, quando um comando é explicado pela primeira vez, seu nome é ligeiramente recuado desde o início da linha. No caso particular de read , isso leva um pouco de navegação antes que você chegue à documentação read real porque (por razões óbvias) a palavra "read" é repetida muito durante a man page. O [[] significa corresponder a [que geralmente precede os parâmetros opcionais. (Eu costumo deixar de fora / ^ \ s * e simplesmente fazer / < comando interno > [[])

Outra alternativa

Se você não se importar com a alteração de formato, poderá converter sua página de manual em um arquivo DVI ou PDF:

man -T dvi bash >bash.dvi

ou

man -T ps bash | ps2pdf - bash.pdf # Requires the Ghostscript suite for ps2pdf

É claro que, com um documento DVI ou PDF, você pode fazer uma pesquisa de texto com facilidade.

    
por 15.10.2013 / 13:15
9

Abordagem 1

man bash , em seguida, /read \[ , em seguida, /-s

Abordagem 2

Você pode tentar uma ferramenta de código aberto para explicar os argumentos de linha de comando chamados explicahell .

Pode ser usado localmente. Leia a documentação no link

Advertências: Geralmente funciona, mas apenas com comandos encontrados no repositório de manpages do Ubuntu

No seu caso, não é possível reconhecer -s em read -s pwd .

Abordagem 3

Encontrei outra ferramenta que parece promissora, mas não funciona no meu sistema.

explicar: Documentação resumida para Unix Comandos

    
por 15.10.2013 / 11:54
8

O que eu geralmente faço neste caso é executar man , pesquisar o título SHELL BUILTIN COMMANDS e pesquisar o conteúdo interno, por exemplo

man bash
/^SHELL BUILTIN
/  read 

no entanto, no bash você pode fazer

help read

ou, dependendo do sistema,

man 1 read
man bash-builtins

Em geral, eu tenho um script chamado he ("ajuda curta") para fazer isto. Você executaria assim:

he bash read
    
por 15.10.2013 / 21:24
3

Não existe uma maneira genérica de encontrar informações em uma página do manual, assim como não há uma maneira genérica de localizar informações em um livro. Depende do que você está procurando.

Quando você está procurando informações sobre um shell embutido, você pode procurar o embutido no início de uma linha de gravação para recuo e seguido por um espaço: procure ^ *read␣ (por exemplo, digite /^ *read␣ Digite ) ( é um espaço). Isso funciona com traço, pdksh, mksh e bash. A página man do Zsh é dividida, então você precisa ler a página zshbuiltins man. O Ksh93 possui símbolos especiais antes dos nomes de alguns builtins, você precisa procurar por ^ *†*␣ em UTF-8 ou ^ *-*␣ em ASCII. Há alguns falsos positivos, mas isso o levará rapidamente à linha correta. A pesquisa por ^ *read($| [-[]) reduz a quantidade de falsos positivos.

Você pode acelerar a pesquisa dizendo ao seu pager onde deseja ir. Por exemplo, PAGER='less "+/^ *read \["' man bash abre a página man bash na descrição do read builtin. Você pode fazer isso uma função:

man-builtin () {
  PAGER="less '+/^ *$1(\$|\[|-)'" man ${SHELL##*/}
}
    
por 16.10.2013 / 02:51
1

Para pular diretamente para a seção SHELL BUILTINS COMMANDS da página man bash, defino o seguinte alias no meu arquivo $HOME/.bash_aliases .

alias man-builtin="man -P 'less -p ^SHELL\ BUILTIN\ COMMANDS' bash"
    
por 31.10.2018 / 01:58
0

Só para oferecer outra alternativa, se você preferir usar um navegador da Web que permita pesquisar facilmente a página atual, use algo como man.cgi usado no freeBSD.org que também permite visualizar páginas man de diferentes sistemas para ver como eles diferem. Eu vi semelhante em outros sites, então espere que existam outras variações ao redor.

O link de ajuda sob apropos oferece algumas informações para obter uma cópia do script para colocar em seu próprio servidor com links para fazer o download das coleções de páginas de manual.

    
por 16.10.2013 / 06:13
0

Eu comecei a criar uma função bash para o propósito. Este snippet pode ser colado no final de ~/.bashrc :

manfind() {
  # required args
  test "$1" -a "$2" || return 1                  

  # create temp file and get its name
  local tmp=$(mktemp /tmp/manfindXXXXXX) || return 1
  ( # subshell for trap
    trap "rm $tmp" EXIT

    # grep all matching lines with line numbers and pipe them to dialog
    if man "$1" |                   # get the whole man page
      grep -n "^\s*$2" |            # grep for the search string, with line nums
      sed 's/:/\n/' |               # replace line num separator with newline for dialog
      cut -c-70  |                  # cut long lines to nice length
      xargs -d'\n' -n 999999 \
        dialog --output-fd 3 --menu "Select line to go to" 0 0 0 3>$tmp -- 1 '(start of man page)'
    then
      # selected line number is now in $tmp, get man page and
      # use vim in read only mode to view it at right line
      man "$1" | vim -R +"$(< $tmp)" -
    else
      # cancel selected from dialog
      exit 1
    fi
  )
}

Os comentários explicam um pouco sobre o que faz. A sequência de pesquisa padrão em pesquisas específicas recebe uma palavra do início das linhas, ignorando o espaço inicial. Exemplos:

# find every line which starts with 'read' followed by space
manfind bash 'read '
# research bash subshells
manfind bash '.*subshell'

Nota: Este script não tem nenhum conceito de seções de páginas de manual ... Vou ver se modifico isso mais tarde, mas definir a variável de ambiente MANSECT de man ajuda.

    
por 15.10.2013 / 12:35
0

Juntando as partes da outra discussão aqui aqui está uma função rápida que você pode deixar no seu .bashrc que irá levá-lo diretamente para o built-in (se existir). Caso contrário, ele abre man como normal:

man() {
    case "$(/bin/bash -c 'type -t '"$1")" in 
        builtin)
            LESS=+?"^       $1 " command -p man bash
            ;;
        *)
            command -p man $@
            ;;
    esac
}
    
por 09.04.2015 / 12:39
0

De qualquer distribuição Linux, você deve ser capaz de usar info bash se quiser ter parágrafos separados por tipo de ação, onde as informações são idênticas às páginas man.

Espero que isso ajude.

    
por 14.11.2017 / 16:20

Tags