Eu finalmente se encheu quando se quer ler sobre o bash 's read
-lo de e -s
opção com man bash
. Eu encontrei o local certo eventualmente (por volta da linha 4500), mas foi frustrante, como sempre, pois as pesquisas /read
e até as /\s-s\s
pesquisas têm muitas correspondências.
Portanto, a pergunta é: como posso ler páginas de manual longas com eficiência ou obter as mesmas informações de outras maneiras localmente ? Como um exemplo específico, como alcançar 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 dica sobre alguma ferramenta e como ela é usada, ou algo completamente diferente, desde que ajude a encontrar o local certo para ler.
Nota: Não estou marcando com bash porque quero que a pergunta seja sobre a leitura da página de manual em geral, mesmo que essa seja possivelmente a página de manual mais comum encontrada.
man
página longa , uso um pequeno script que deixo no painel superior. yuugian.com/demo/gkman.txt Compartilhe e aproveitebash
si: assim como você, também preciso daSHELL BUILTINS
parte do manual, que fica na linha 3500 . Então, sabendo disso, na próxima vez em que eu diriaman bash
e diminuiria 66%, digitando66%
, algumas vezes PgDn e eu estou lá. Embora eu tenha escolhido 66 porque pode ser memorizado como "Rota 66" , na verdade é um pouco mais do que isso, embora não seja tão fácil de memorizar, a menos que seja o começo do seu telefone, etc. :) Pelo menos o "Rota 66 "é universal e conhecido mundialmente.Respostas:
Para obter ajuda rápida em um Bash integrado, use
help
:é o que você quer.
Para formatação de página de manual, use
ou, melhor ainda,
Se você ainda insistir em procurá-lo na página de manual, acho que o que rapidamente me leva à explicação de um comando é
Isso funciona porque, quando um comando é explicado pela primeira vez, seu nome é recuado levemente desde o início da linha. No caso particular de
read
, isso leva um pouco de navegação antes de você chegar àread
documentação real , porque (por razões óbvias) a palavra "ler" é repetida muito por toda a página do manual. O [[] significa combinar um [que geralmente precede parâmetros opcionais. (Normalmente deixo de fora / ^ \ s * e simplesmente faço / <comando interno> [[])Outra alternativa
Se você não se importa com a alteração do formato, pode converter sua página de manual em um arquivo DVI ou PDF:
ou
Obviamente, dado um documento DVI ou PDF, você pode fazer uma pesquisa de texto facilmente.
fonte
help
é ótimo, eu me pergunto como nunca ouvi falar ...ps2pdf
não é tão útil, pois não pode (aparentemente) criar índice de qualquer tipo.Abordagem 1
man bash
então/read \[
então/-s
Abordagem 2
Você pode tentar uma ferramenta open source para explicar os argumentos de linha de comando chamados explainshell .
Pode ser usado localmente. Leia a documentação em https://github.com/idank/explainshell
Advertências: Geralmente funciona, mas apenas com comandos encontrados no repositório de páginas de manual do Ubuntu
No seu caso, ele não pode reconhecer a
-s
trocaread -s pwd
.Abordagem 3
Eu encontrei outra ferramenta que parece promissora, mas não funciona no meu sistema.
explicação: Documentação curta para comandos Unix
fonte
/-s\b
para evitar ocorrências como--some-other-command
(enquanto ainda encontra cadeias como-s,
, que você não obteria se pesquisasse/-s
com um espaço).O que eu costumo fazer neste caso é apenas executar
man
, procurar oSHELL BUILTIN COMMANDS
cabeçalho e depois o builtin, ou seja,no entanto, no bash você pode fazer
ou, dependendo do sistema, um dos
Em geral, eu tenho um script chamado
he
("ajuda curta") para fazer isso. Você executaria assim:fonte
desc
parahe
. github.com/mikelward/scripts/blob/master/heNão existe uma maneira genérica de encontrar informações em uma página de manual, assim como não há uma maneira genérica de encontrar informações em um livro. Depende do que você está procurando.
Ao procurar informações sobre um shell embutido, você pode procurar pelo embutido no início de uma linha, exceto pelo recuo, e seguido por um espaço: pesquise
^ *read␣
(por exemplo, tipo/^ *read␣
Enter) (␣
é um espaço). Isso funciona com dash, pdksh, mksh e bash. A página de manual do Zsh é dividida, portanto você precisa ler azshbuiltins
página de manual. O Ksh93 possui símbolos especiais antes dos nomes de alguns componentes internos, você precisa procurar^ *†*␣
em UTF-8 ou^ *-*␣
em ASCII. Existem alguns falsos positivos, mas isso o levará rapidamente à linha certa. A pesquisa^ *read($| [-[])
reduz a quantidade de falsos positivos.Você pode acelerar a pesquisa dizendo ao seu pager para onde deseja ir. Por exemplo,
PAGER='less "+/^ *read \["' man bash
abre a página de manual do bash na descrição doread
builtin. Você pode fazer disso uma função:fonte
mksh
manual,/ read
(dois espaços, nome do comando, um espaço) geralmente encontra o local certo (esse é um truque que eu mesmo uso e é rápido para digitar). Obrigado por perguntar sobre isso; Vou colocar fazendo (um pouco) referências separadas para todos os utilitários incluídos no mksh no meu TODO./ read
tende a ter muitos falsos positivos quando a implementação do homem justifica o texto.Para pular diretamente para a seção SHELL BUILTINS COMMANDS da página de manual do bash, defino o seguinte alias no meu
$HOME/.bash_aliases
arquivo.fonte
Apenas para oferecer outra alternativa, se você preferir usar um navegador da Web que permita pesquisar facilmente na página atual, você pode usar algo como man.cgi usado no freeBSD.org, que também permite exibir páginas de manual de diferentes sistemas para ver como eles diferem. Eu já vi similar em outros sites, então espero que haja outras variações.
O link de ajuda em apropos oferece algumas informações para obter uma cópia do script para colocar em seu próprio servidor com links para baixar as coleções de páginas de manual.
fonte
Comecei a criar uma função bash para esse fim. Este fragmento pode ser, por exemplo, colado no final de
~/.bashrc
:Comentários explicam um pouco sobre o que fazem. A sequência de pesquisa padrão, em particular, pesquisa uma determinada palavra desde o início das linhas, ignorando o espaço inicial. Exemplos:
Nota: Este script não tem conceito de seções da página de manual ... Vou ver se eu ajusto isso mais tarde, mas a configuração da
MANSECT
variável de ambiente man ajuda.fonte
trap 'rm -f "$tmp"'
man "$1" | vim -R - "+/$2"
faria algo semelhante?$2
, então não.trap
. Não encontrei uma maneira limpa de fazer isso em uma função sem criar um subshell.+/REGEX
Juntando as peças da outra discussão aqui, aqui está uma função rápida que você pode deixar na sua
.bashrc
que o levará diretamente ao built-in (se existir). Caso contrário, ele abreman
normalmente:fonte
Em qualquer distribuição Linux, você poderá usar
info bash
se desejar ter parágrafos separados por tipo de ação, onde as informações são idênticas às páginas de manual.fonte