Como fazer o 'man' funcionar para comandos e palavras-chave embutidos no shell?

53

Eu uso o comando man o tempo todo quando quero obter informações sobre um comando específico. Mas isso não me ajuda muito quando esse comando específico é um shell embutido. Por exemplo:

man cd

retorna:

No manual entry for cd

A minha pergunta é: é possível fazer man funcionar também para todos os comandos internos do shell (como cd , alias , history , etc.) e palavras-chave (como if , while , [[ , { , etc.)?

    
por Radu Rădeanu 26.03.2014 / 11:30

4 respostas

63

O comando help quando usado com a opção -m pode exibir informações sobre os comandos incorporados no formato pseudo-manpage. Por exemplo:

help -m cd | less

exibirá informações sobre o comando cd em um formato quase exatamente como em uma página de manual.

A partir deste comando, você pode agrupar o comando man em uma função em seu arquivo .bashrc da seguinte forma:

man () {
    case "$(type -t -- "$1")" in
    builtin|keyword)
        help -m "$1" | sensible-pager
        ;;
    *)
        command man "$@"
        ;;
    esac
}

Depois disso, man funcionará também para todos os comandos e palavras-chave internos do shell. Por exemplo:

man :

exibirá:

NAME
    : - Null command.

SYNOPSIS
    :

DESCRIPTION
    Null command.

    No effect; the command does nothing.

    Exit Status:
    Always succeeds.

SEE ALSO
    bash(1)

IMPLEMENTATION
    GNU bash, version 4.2.45(1)-release (x86_64-pc-linux-gnu)
    Copyright (C) 2011 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
    
por Radu Rădeanu 26.03.2014 / 11:30
26
man bash-builtins

Contém os snippets de ajuda para os comandos internos, embora em um formato um pouco mais condensado do que o help equivalente.

    
por Oli 26.03.2014 / 11:31
12

Você pode instalar páginas de manual sobre o uso de um sistema POSIX para desenvolvimento ,

sudo apt-get install manpages-posix-dev

Ele irá fornecer man pages para shell builtins.

$ type cd
cd is a shell builtin

Agora tente,

$ man cd
CD(P)                      POSIX Programmer's Manual                      CD(P)

NAME
   cd - change the working directory

SYNOPSIS
   cd [-L | -P] [directory]


...
    
por souravc 27.03.2014 / 05:05
2

Esta solução funciona perfeitamente bem, mas é uma piada também porque a primeira coisa que pensei quando li sua pergunta foi 'Quem ainda literalmente usa o homem na linha de comando? Será que todos não apenas buscam no Google a página de manual que eles querem (para que eles tenham itens extravagantes como rolagem ilimitada)? '. Então percebi que os sites que eu geralmente tenho todos os tipos de comandos, então porque não apenas usá-los para fornecer uma interface de página man uniforme em todos os comandos. Assim, essa diversão nasceu.

Isso requer uma conexão à Internet para quaisquer entradas que você não tenha consultado pelo menos uma vez. Ele também precisa desses dois pequenos aplicativos que estão faltando em uma instalação padrão do Ubuntu:

 sudo apt-get install tidy html2text

Estes não são absolutamente necessários, mas ajudam a torná-lo um pouco mais agradável. O Tidy limpará o HTML, e o html2text formatará esse HTML como texto formatado (o que geralmente é bastante trivial, já que a maioria desses sites já está formatada em texto e é apenas agrupada em tags < pre & gt ;.

Agora tudo o que você precisa fazer é adicionar isso ao final de ~/.profile :

function iman() {
    if [ ! -d "/usr/share/iman" ]; then
        sudo mkdir -m a=rwx /usr/share/iman
    fi
    if [ ! -f "/usr/share/iman/$1.html" ]; then
        curl "http://unixhelp.ed.ac.uk/CGI/man-cgi?$1"| tidy -n -asxml 2>/dev/null| html2text > "/usr/share/iman/$1.html"; 
    fi
    if [ -f "/usr/share/iman/$1.html" ]; then
        cat "/usr/share/iman/$1.html";
    else
        echo "Entry not found."
    fi
}

Depois de sair e voltar, você deve poder digitar:

iman cd

e ele exibirá a página man para cd .

Isso usa um diretório de dados (/ usr / share / iman) para minimizar nossos requisitos de rede (assim, ele funcionará para entradas que você já encontrou antes mesmo sem a conexão; também para minimizar a carga nesse linux aleatório) site de man pages eu encontrei com as entradas do sistema que queremos também. Se você não usa mais, você vai querer removê-lo para recuperar espaço em disco.

Espero que o resto seja bastante simples.

    
por krowe 26.03.2014 / 15:05