58 votes

Comment faire en sorte que `man` fonctionne pour les commandes et mots-clés intégrés de Shell ?

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

man cd

retours :

No manual entry for cd

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

70voto

Radu Rădeanu Points 156862

En help lorsqu'elle est utilisée avec -m permet d'afficher des informations sur les commandes intégrées au format pseudo-manpage. Par exemple :

help -m cd | less

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

A partir de cette commande, vous pouvez envelopper man dans une fonction de votre .bashrc comme suit :

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

Après cette man fonctionnera également pour toutes les commandes et mots-clés Shell. Par exemple :

man :

s'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>

30voto

Mufaka Points 54
man bash-builtins

Il contient des extraits d'aide pour les commandes intégrées, dans un format un peu plus condensé que celui de la page d'accueil du site. help équivalent.

13voto

sourav c. Points 40637

Vous pouvez installer des pages de manuel sur l'utilisation d'un Système POSIX pour le développement comme,

sudo apt-get install manpages-posix-dev

Il fournira des pages de manuel pour les buildins 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]

...

3voto

krowe Points 423

Cette solution fonctionne parfaitement bien, mais c'est aussi un peu une blague, car la première chose à laquelle j'ai pensé en lisant votre question a été : "Qui utilise encore littéralement man en ligne de commande ? Tout le monde ne se contente-t-il pas de chercher sur Google la page de manuel qu'il souhaite (afin d'obtenir des fonctions sophistiquées comme le défilement illimité) ? Puis j'ai réalisé que les sites que je cherche sur Google ont généralement 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. C'est ainsi que ce jeu est né.

Cela nécessite une connexion Internet pour toutes les entrées que vous n'avez pas déjà consultées au moins une fois. Elle a également besoin de ces deux petites applications qui sont absentes de l'installation par défaut d'Ubuntu :

 sudo apt-get install tidy html2text

Ils ne sont pas absolument nécessaires mais ils aident à rendre le tout un peu plus joli. Tidy va nettoyer le HTML et html2text va formater ce html en texte formaté (ce qui est généralement assez trivial puisque la plupart de ces sites sont déjà formatés en texte et juste enveloppés dans des balises <pre>.

Maintenant, tout ce que vous devez faire est d'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/$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
}

Après vous être déconnecté puis reconnecté, vous devriez pouvoir taper ceci :

iman cd

et il affichera la page de manuel de cd .

Il utilise un répertoire de données (/usr/share/iman) afin de minimiser les besoins du réseau (ainsi, il fonctionnera pour les entrées que vous avez déjà trouvées auparavant même sans connexion ; également pour minimiser la charge sur ce site aléatoire de pages de manuel linux que j'ai trouvé avec les entrées système que nous voulons aussi). Si vous n'utilisez plus ce site, vous pouvez le supprimer pour récupérer de l'espace disque.

Avec un peu de chance, le reste est assez simple.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X