Comment faire pour que "man" fonctionne pour les commandes et les mots-clés intégrés du shell?

51

J'utilise la commande man tout le temps lorsque je veux obtenir des informations sur une commande spécifique. Mais cela ne m'aide pas trop lorsque cette commande spécifique est un shell intégré. Par exemple:

man cd

renvoie:

No manual entry for cd

Ma question est la suivante: il est possible de faire en sorte que man fonctionne également pour toutes les commandes intégrées du shell (telles que cd , alias , history , etc.) et les mots clés (comme if , while , [[ , { , etc.)?

    
posée Radu Rădeanu 26.03.2014 - 11:30
la source

4 réponses

60

La commande help lorsque est utilisée avec l'option -m peut afficher des informations sur les commandes intégrées au format pseudo-page de manuel. Par exemple:

help -m cd | less

affichera des informations sur la commande cd dans un format presque identique à celui d’une page de manuel.

À partir de cette commande, vous pouvez inclure la commande man dans une fonction de votre fichier .bashrc comme suit:

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

Après cela, man fonctionnera également pour toutes les commandes et mots-clés intégrés au shell. Par exemple:

man :

affichera:

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>
    
réponse donnée Radu Rădeanu 26.03.2014 - 11:30
la source
26
man bash-builtins

Ceci contient des extraits d'aide pour les commandes intégrées, quoique dans un format légèrement plus condensé que l'équivalent help .

    
réponse donnée Oli 26.03.2014 - 11:31
la source
12

Vous pouvez installer des pages de manuel sur l’utilisation d’un système POSIX pour le développement en tant que

sudo apt-get install manpages-posix-dev

Il fournira des pages de manuel pour les intégrations de shell.

$ type cd
cd is a shell builtin

Maintenant, essayez,

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

NAME
   cd - change the working directory

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


...
    
réponse donnée souravc 27.03.2014 - 05:05
la source
2

Cette solution fonctionne parfaitement, mais c'est aussi une blague car la première chose que j'ai pensé en lisant votre question était: «Qui utilise toujours l'homme de la ligne de commande? Tout le monde ne se contente-t-il pas de rechercher la page de manuel qu’il souhaite (de manière à obtenir des fonctionnalités sophistiquées telles que le défilement illimité)? Ensuite, je me suis rendu compte que les sites sur lesquels je travaillais habituellement avaient tous les deux types de commandes, alors pourquoi ne pas les utiliser pour fournir une interface de page de manuel uniforme pour toutes les commandes. Par conséquent, cet amusement était né.

Cela nécessite une connexion Internet pour toutes les entrées que vous n'avez pas encore recherchées au moins une fois. Il a également besoin de ces deux petites applications manquantes dans une installation par défaut d'Ubuntu:

 sudo apt-get install tidy html2text

Celles-ci ne sont pas absolument nécessaires mais elles aident à donner un aspect plus agréable. Tidy nettoiera le HTML et html2text formatera ce HTML comme texte formaté (ce qui est généralement assez trivial puisque la plupart de ces sites sont déjà formatés en texte et simplement enveloppés dans les balises & lt; pré & gt.

Il ne vous reste plus qu'à ajouter ceci à la fin de ~/.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
}

Après vous être déconnecté et de retour, vous devriez pouvoir taper ceci:

iman cd

et il affichera la page de manuel pour cd .

Cela utilise un répertoire de données (/ usr / share / iman) afin de minimiser les exigences de notre réseau (il fonctionnera donc pour les entrées que vous avez déjà trouvées avant même la connexion; pour minimiser la charge sur ce linux aléatoire) man pages site que j'ai trouvé avec les entrées du système que nous voulons aussi. Si vous ne l'utilisez plus, vous souhaiterez le supprimer pour récupérer de l'espace disque.

Espérons que le reste est assez simple.

    
réponse donnée krowe 26.03.2014 - 15:05
la source

Lire d'autres questions sur les étiquettes