Как сделать работу «человек» для команд и ключевых слов командной строки?

53

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

man cd

возвращает:

No manual entry for cd

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

    
задан Radu Rădeanu 26.03.2014 в 11:30
источник

4 ответа

62

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

help -m cd | less

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

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

man () {
    case "$(type -t -- "$1")" in
    builtin|keyword)
        help -m "$1" | sensible-pager
        ;;
    *)
        command man "[email protected]"
        ;;
    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>
    
ответ дан Radu Rădeanu 26.03.2014 в 11:30
источник
26
man bash-builtins

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

    
ответ дан Oli 26.03.2014 в 11:31
12

Вы можете установить страницы руководства об использовании системы 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]


...
    
ответ дан souravc 27.03.2014 в 05:05
2

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

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

 sudo apt-get install tidy html2text

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

Теперь все, что вам нужно сделать, это добавить это в конец ~/.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), чтобы свести к минимуму наши требования к сети (поэтому он будет работать для записей, которые вы уже нашли, даже без подключения, а также для минимизации нагрузки на этот случайный Linux сайт man pages, который я нашел с помощью системных записей, которые мы хотим в нем). Если вы больше не используете это, вы захотите удалить это для восстановления дискового пространства.

Надеюсь, что все остальное довольно прямолинейно.

    
ответ дан krowe 26.03.2014 в 15:05