Как заставить `man` работать для встроенных команд оболочки и ключевых слов?

Я использую man Команда все время, когда я хочу получить информацию о конкретной команде. Но это не сильно помогает мне, когда эта конкретная команда является встроенной оболочкой. Например:

man cd

возвращает:

No manual entry for cd

Мой вопрос: можно сделать man также работает для всех встроенных команд оболочки (например, cd, alias, historyи т. д.) и ключевые слова (например, if, while, [[, {, так далее.)?

4 ответа

Решение

help команда когда используется с -m опция может отображать информацию о встроенных командах в формате псевдо-manpage. Например:

help -m cd | less

будет отображать информацию о cd Команда в формате почти так же, как на странице руководства.

Начиная с этой команды вы можете обернуть man Команда в одной функции в вашем .bashrc файл следующим образом:

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

После этого man будет работать также для всех встроенных команд оболочки и ключевых слов. Например:

man :

будет отображать:

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>
man bash-builtins

Он содержит фрагменты справки для встроенных команд, хотя и в несколько более сжатом формате, чем help эквивалент.

Вы можете установить страницы руководства по использованию системы POSIX для разработки, как,

sudo apt-get install manpages-posix-dev

Он предоставит справочные страницы для встроенных команд оболочки.

$ type cd
cd is a shell builtin

Теперь попробуй,

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

NAME
   cd - change the working directory

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


...

Это решение работает очень хорошо, но это тоже немного шутка, потому что первое, что я подумал, когда прочитал ваш вопрос, было: "Кто все еще буквально использует человека из командной строки? Разве все не просто Google гугл-страницы, которые они хотят (чтобы они получили такие необычные вещи, как неограниченная прокрутка)? ". Затем я понял, что сайты, которые я обычно использую в Google, имеют оба типа команд, так почему бы просто не использовать их для обеспечения единого интерфейса man-страницы для всех команд. Следовательно, это веселье родилось.

Это требует подключения к Интернету для любых записей, которые вы еще ни разу не просматривали. Также нужны эти два небольших приложения, которые отсутствуют в стандартной установке Ubuntu:

 sudo apt-get install tidy html2text

Они не являются абсолютно необходимыми, но они помогают выглядеть немного лучше. Tidy очистит HTML, а html2text отформатирует этот html как форматированный текст (что обычно довольно тривиально, поскольку большинство этих сайтов уже отформатированы и просто заключены в теги

.

Теперь все, что вам нужно сделать, это добавить это в конец ~/.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
}

После того, как вы выйдете из системы, а затем вернетесь в нее, вы сможете набрать:

iman cd

и он покажет страницу руководства для cd,

При этом используется каталог данных (/usr/share/iman), чтобы минимизировать наши сетевые требования (поэтому он будет работать для записей, которые вы уже нашли ранее, даже без подключения), а также для минимизации нагрузки на этот случайный сайт man-страниц linux Я нашел с записями системы, которые мы хотим в этом также). Если вы больше не используете это, вы захотите удалить это, чтобы освободить место на диске.

Надеюсь, все остальное довольно просто.

Другие вопросы по тегам