[Перевод] Кунг-фу стиля Linux: удобный доступ к справке при работе с bash

В наши дни редакторы кода часто предлагают программистам помощь или справочные сведения, относящиеся к тому, что вводится с клавиатуры. Это может быть всё что угодно — от списка коротких вариантов автозавершения ввода до шаблонов для ввода больших фрагментов кода. Если вы уже написали миллион программных строк на некоем языке, то такая вот помощь может вам мешать. Но если вы пишете программы лишь от случая к случаю, вам это может очень пригодиться. Я пользуюсь Linux уже много лет, но понимаю, что есть люди, которые не работают в этой ОС ежедневно. А учитывая растущую популярность Raspberry Pi, учитывая распространённость Linux-серверов, и то, что в Windows 10 появилась возможность работать с bash, оказывается, что всё больше и больше людей пользуются командной оболочкой Linux лишь время от времени. Можно ли как-то облегчить жизнь таким людям? Полагаю, что можно. Специально для этого я написал небольшой скрипт, который называется bashelp.

jof_lq97ajeei6lnxsde46g8sik.jpeg
На самом деле, в сфере справочной информации по Linux-командам есть кое-что хорошее и кое-что плохое. Хорошо здесь то, что в Linux уже давно имеется встроенная команда, позволяющая получать справочные сведения. Это — man (сокращение для manual — «руководство»). Если говорить о плохом, то можно отметить, что для получения справки нужно оставить текущее дело и выполнить команду man.

Существуют графические интерфейсы для man, вроде yelp, показанного на следующем рисунке.

c3c494cb4f7b02bdd33979004a8be36c.png


Графический интерфейс для 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?

oug5kh6sjydt9llengsiebnp40w.png

3piw1j3wd_cgmzq9sefgferaumu.png

© Habrahabr.ru