Как заставить `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 Я нашел с записями системы, которые мы хотим в этом также). Если вы больше не используете это, вы захотите удалить это, чтобы освободить место на диске.
Надеюсь, все остальное довольно просто.