web-dev-qa-db-fra.com

Comment faire fonctionner man pour les commandes et les mots-clés intégrés à Shell?

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

man cd

résultats:

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 à Shell (telles que cd, alias, history, etc.) et des mots clés (comme if, while, [[, {, etc.)?

55
Radu Rădeanu

La commande helpname__, lorsqu'elle est utilisée avec l'option -m, peut afficher des informations sur les commandes intégrées au format pseudo-manpage. Par exemple:

help -m cd | less

affichera des informations sur la commande cddans un format presque identique à celui d'une page de manuel.

À partir de cette commande, vous pouvez envelopper la commande mandans une fonction de votre fichier .bashrc, comme suit:

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

Après cela, manfonctionnera également pour toutes les commandes et tous les mots-clés intégrés à 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>
65
Radu Rădeanu
man bash-builtins

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

27
Oli

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

Sudo apt-get install manpages-posix-dev

Il fournira des pages de manuel pour les commandes intégrées de Shell.

$ type cd
cd is a Shell builtin

Maintenant essaye,

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

NAME
   cd - change the working directory

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


...
13
souravc

Cette solution fonctionne parfaitement mais est un peu une blague aussi parce que la première chose à laquelle j'ai pensé en lisant votre question était: "Qui utilise encore littéralement man depuis la ligne de commande? Tout le monde ne recherche-t-il pas simplement dans la page de manuel de son choix (pour obtenir des fonctionnalités sophistiquées comme le défilement illimité)? '. Je me suis ensuite rendu compte que les sites que je recherche généralement en Google ont 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, ce plaisir 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. Il a également besoin de ces deux petites applications qui manquent 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 à rendre l’apparence un peu plus agréable. Tidy nettoiera le code HTML et html2text formatera ce code en tant que texte formaté (ce qui est généralement assez trivial, car la plupart de ces sites sont déjà formatés et entourés de balises <pre>.

Maintenant, tout ce que vous avez à 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 revenu, vous devriez pouvoir taper ceci:

iman cd

et il affichera la page de manuel pour cd.

Ceci utilise un répertoire de données (/ usr/share/iman) afin de minimiser les exigences de notre réseau (afin que cela fonctionne pour les entrées que vous avez déjà trouvées même sans connexion), ainsi que pour réduire la charge sur ce site de pages de manuel linux aléatoires. J'ai trouvé avec les entrées du système que nous voulons aussi). Si vous ne l'utilisez plus, vous voudrez le supprimer pour récupérer de l'espace disque.

Espérons que le reste est assez simple.

3
krowe