Come far funzionare 'man' per i comandi e le parole chiave incorporati nella shell?

51

Uso il comando man per tutto il tempo in cui voglio ottenere informazioni su un comando specifico. Ma questo non mi aiuta troppo quando quel comando specifico è integrato nella shell. Ad esempio:

man cd

restituisce:

No manual entry for cd

La mia domanda è: è possibile impostare man anche per tutti i comandi incorporati della shell (come cd , alias , history , ecc.) e parole chiave (come if , while , [[ , { , ecc.)?

    
posta Radu Rădeanu 26.03.2014 - 11:30

4 risposte

60

Il comando help quando viene utilizzato con l'opzione -m può visualizzare informazioni sui comandi incorporati nel formato pseudo-manpage. Ad esempio:

help -m cd | less

visualizzerà le informazioni sul comando cd in un formato quasi esattamente come in una pagina di manuale.

Partendo da questo comando puoi eseguire il comando wrap man in una funzione nel tuo file .bashrc come segue:

man () {
    case "$(type -t -- "")" in
    builtin|keyword)
        help -m "" | sensible-pager
        ;;
    *)
        command man "[email protected]"
        ;;
    esac
}

Dopo questo man funzionerà anche per tutti i comandi e le parole chiave incorporati nella shell. Ad esempio:

man :

mostrerà:

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>
    
risposta data Radu Rădeanu 26.03.2014 - 11:30
26
man bash-builtins

Questo contiene frammenti di aiuto per i comandi incorporati, anche se in un formato leggermente più condensato rispetto all'equivalente help .

    
risposta data Oli 26.03.2014 - 11:31
12

Puoi installare pagine di manuale sull'uso di un sistema POSIX per lo sviluppo come,

sudo apt-get install manpages-posix-dev

Fornirà pagine man per i builtin della shell.

$ type cd
cd is a shell builtin

Adesso prova,

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

NAME
   cd - change the working directory

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


...
    
risposta data souravc 27.03.2014 - 05:05
2

Questa soluzione funziona perfettamente ma è anche un po 'scherzosa perché la prima cosa che ho pensato quando ho letto la tua domanda era: "Chi usa ancora letteralmente l'uomo dalla riga di comando? Non tutti solo Google la pagina man che vogliono (in modo che ottengano cose fantasiose come lo scrolling illimitato)? '. Poi ho capito che i siti in cui io di solito Google hanno entrambi i tipi di comandi, quindi perché non usarli per fornire un'interfaccia man uniforme per tutti i comandi. Quindi, questo divertimento è nato.

Ciò richiede una connessione Internet per tutte le voci che non hai già cercato almeno una volta. Ha bisogno anche di queste due piccole app che mancano in un'installazione predefinita di Ubuntu:

 sudo apt-get install tidy html2text

Non sono assolutamente necessari, ma aiutano a renderlo un po 'più bello. Tidy pulirà l'HTML e html2text formatterà l'html come testo formattato (che di solito è piuttosto banale dato che la maggior parte di questi siti è già formattata nel testo e semplicemente racchiusa nei tag & lt; pre & gt;.

Ora tutto ciò che devi fare è aggiungerlo alla fine di ~/.profile :

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

Dopo il logout e poi di nuovo dovresti poterlo scrivere:

iman cd

e verrà visualizzata la pagina man per cd .

Questo usa una directory di dati (/ usr / share / iman) per minimizzare i nostri requisiti di rete (quindi funzionerà per le voci che hai già trovato prima anche senza la connessione, anche per minimizzare il carico su questo Linux casuale sito di pagine man che ho trovato con le voci di sistema che vogliamo anche in esso). Se non lo usi più, ti consigliamo di rimuoverlo per recuperare spazio su disco.

Speriamo che il resto sia abbastanza semplice.

    
risposta data krowe 26.03.2014 - 15:05

Leggi altre domande sui tag