На самом деле, в сфере справочной информации по Linux-командам есть кое-что хорошее и кое-что плохое. Хорошо здесь то, что в Linux уже давно имеется встроенная команда, позволяющая получать справочные сведения. Это
man
(сокращение для manual руководство).
Если говорить о плохом, то можно отметить, что для получения
справки нужно оставить текущее дело и выполнить команду
man
.Существуют графические интерфейсы для
man
, вроде
yelp
, показанного на следующем рисунке.Графический интерфейс для man
Для просмотра man-страниц можно даже пользоваться веб-браузером. Но ни один из этих способов получения справочной информации не связан с тем, что пользователь вводит при работе с командной строкой. Для получения справки нужно открывать новое окно, искать там материалы, а потом возвращаться к тому, что делалось до этого. Такое положение дел заставило меня задуматься о том, как создать нечто вроде встроенной системы контекстной помощи для bash.
При создании подобной справочной системы нужно, как и в случае с настройкой автозавершения ввода по нажатию клавиши
Tab
, учитывать две вещи: во-первых нужна функция,
выводящая справочные сведения, во-вторых нужно некое средство,
заставляющее readline
в нужный момент вызвать эту
функцию. Моя система представлена скриптом bashelp.sh
,
который решает обе вышеописанные задачи. Но он работает только
тогда, когда задано значение переменной $DISPLAY
, что
указывает на то, что в настоящий момент используется графический
терминал. В Mac, кстати, работа с графическим интерфейсом устроена
не так. Поэтому если вы хотите пользоваться этим скриптом на
Mac-компьютере, вам понадобится внести в скрипт некоторые
изменения. Если вы сделаете это, и то, что у вас получится,
заработает, я с удовольствием взгляну на ваш PR в репозиторий
проекта или на форк проекта.Скрипт позволяет задать клавиатурную команду, вызывающую справку. Я выбрал сочетание клавиш
CTRL+Y
. Команда
bind
, используемая в скрипте, полагает, что это
сочетание клавиш выглядит как \C-Y
. Найти эту команду
можно в верхней части кода скрипта. Вы можете выбрать другое
сочетание клавиш. Там есть и ещё некоторые настройки. Например,
man-справку можно открыть в отдельном окне терминала, или можно
запустить графический вариант man
. Подробности о
настройке скрипта ищите в файле
readme.Сама функция вывода справки устроена очень просто. Если у вас нет графической системы X она работать не будет (опять же обратите внимание на
$DISPLAY
). Она ожидает, что данные от
readline
будут в $READLINE_LINE
и
$READLINE_POINT
. Если данных нет скрипт завершает
работу. После этого функция берёт первое слово из строки до
пробела, а после этого обрабатывает все опции, что позволяет ей
открыть справку в том виде, в котором нужно пользователю.Конечно, это лишь один из примеров того, что можно сделать, вмешиваясь в работу
readline
. Это полезный приём,
который пригодится тем, кто пользуется bash-скриптами или пишет
их.Если вы нуждаетесь в дополнительных настройках bash вы, например, всегда можете поменять приглашение командной строки. А если вам, например, нужно, чтобы справочный скрипт возвращал бы фокус исходному окну, или закрывал бы открытое им окно в определённых обстоятельствах взгляните на этот материал.
Применяете ли вы какие-нибудь особые приёмы при работе со справочными материалами по командам Linux?