Как стать автором
Обновить
2730.97
RUVDS.com
VDS/VPS-хостинг. Скидка 15% по коду HABR15

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

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



Все переводы серии
Кунг-фу стиля Linux: удобная работа с файлами по SSH
Кунг-фу стиля Linux: мониторинг дисковой подсистемы
Кунг-фу стиля Linux: глобальный поиск и замена строк с помощью ripgrep
Кунг-фу стиля Linux: упрощение работы с awk
Кунг-фу стиля Linux: наблюдение за файловой системой
Кунг-фу стиля Linux: наблюдение за файлами
Кунг-фу стиля Linux: удобный доступ к справке при работе с bash
Кунг-фу стиля Linux: великая сила make
Кунг-фу стиля Linux: устранение неполадок в работе incron
Кунг-фу стиля Linux: расшаривание терминала в браузере
Кунг-фу стиля Linux: синхронизация настроек
Кунг-фу стиля Linux: бесплатный VPN по SSH
Кунг-фу стиля Linux: превращение веб-приложений в полноценные программы
Кунг-фу стиля Linux: утилита marker и меню для командной строки
Кунг-фу стиля Linux: sudo и поворот двух ключей
Кунг-фу стиля Linux: программное управление окнами
Кунг-фу стиля Linux: организация работы программ после выхода из системы
Кунг-фу стиля Linux: регулярные выражения
Кунг-фу стиля Linux: запуск команд
Кунг-фу стиля Linux: разбираемся с последовательными портами
Кунг-фу стиля Linux: базы данных — это файловые системы нового уровня
Кунг-фу стиля Linux: о повторении кое-каких событий сетевой истории
Кунг-фу стиля Linux: PDF для пингвинов

На самом деле, в сфере справочной информации по 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?



Теги:
Хабы:
Всего голосов 24: ↑22 и ↓2+20
Комментарии4

Публикации

Информация

Сайт
ruvds.com
Дата регистрации
Дата основания
Численность
11–30 человек
Местоположение
Россия
Представитель
ruvds