Разукрашиваем вывод mysql-client в консоли

в 7:53, , рубрики: console, mysql, метки: , ,

Цвет и звук — это те небольшие радости, которые могут разукрасить и облегчить будние администратора при постоянной работе с консолью. Вывод цветовой информации регулируется так называемым escape-последовательностями, определяющими среди прочего цвет текста и цвет фона.

Общий вид: 33[Xm, где X — это значение параметра (цифра). Например, echo -n "33[34mHELLO" выведет синим цветом «HELLO». Таблицу цветов и других доступных параметров (подчеркивание, мигание и т.п.) можно получить в документации man console_codes в разделе «ECMA-48 Set Graphics Rendition». Обычно поддержка цвета интегрирована в само приложение, но mysql-client не входит в число таких программ.

В интернете не раз был встречен вопрос о разукрашивании консоли mysql, но нигде не нашлось рецепта. Только общие слова «может быть состряпать обертку» или «посмотрите в исходном коде». Такой вопрос на StackOverflow жил без ответа более 2 лет! «Жил» было специально употреблено в прошедшем времени, потому что ответ нашелся.

Поможет нам утилита grc. Она доступна в большинстве дистрибутивов и о ней многие знают. Но как обернуть в нее вывод mysql-client?

Разукрашиваем вывод mysql client в консоли

Утилита grc (Generic Colorizer) — это на самом деле обертка для grcat, которая запускает указанную команду и направляет вывод в grcat согласно конфигу. Нам понадобится непосредственно grcat, для которой будет написан конфиг, а так же небольшая настройка mysql-client.

В чем же проблема просто направить вывод mysql-client в grcat? Или просто использовать grc mysql…? В том, что mysql-client распознает окружение, из которого вызывалась команда. Если она используется интерактивно, то отображается табличная разметка. Если вызов был из скрипта, или поток данных направлен в другую программу — убирает табличную разметку из вывода и использует табуляцию. Простой пример:

$ mysql test -e "select * from test_table"
+----+-------+
| id | value |
+----+-------+
| 1  | a     |
+----+-------+
$ mysql temp -e "select * from test_table" | cat - 
id  value
1   a

В первом случае мы используем вывод в консоль, и отображается таблица. Во втором — перенаправляем вывод через cat, при этом таблица магическим образом пропадает.

И на помощь приходит -черный плащ- чтение документации mysql. Оказывается, в mysql-client можно задать параметр PAGER, который отвечает за вывод результатов на экран. Им-то мы и воспользуемся, прописав туда grcat. Не забываем указать файл с конфигурацией. Вот фрагмент файла ~/.my.cnf:

[mysql]
pager  = grcat ~/.grcat

Не обязательно задавать PAGER в конфиге, можно каждый раз вводить его руками, но это уже на любителя

mysql> pager grcat ~/.grcat
PAGER set to 'grcat ~/.grcat'

Все, что нам осталось сделать — это оформить конфиг для grcat, чтобы он распознавал в выоде таблицы mysql и применял к ним цветовую схему. Выше мы указали, что искать его следует по пути ~/.grcat. Конфиг состоит из групп параметров, обязательными являются regexp и colours, разделяются минусом, решетка — комментарии. Утилита проверяет совпадение регулярного выражение с текущей строкой и применяет на результат совпадение указанный цвет. Если в конфигурации указан параметр count=stop, то при совпадении регулярного выражения программа переходит к следующей строке. Вот такой может получится конфигурация:

#разделители строк для вертикального вывода результатов с помощью G
regexp=[*]+.+[*]+
count=stop
colours=white
-
#границы таблиц
regexp=[+-|]+
colours=red
-
#цвет текста по умолчанию
regexp=[w.]+
colours=green
-
#текст в скобках ( ) и кавычках ' '
regexp=([wd,']+)
colours=white
-
#числа
regexp=s[d.]+s
colours=yellow
-
#имена полей при вертикальном выводе с помощью G
regexp=w+:
colours=white
-
#даты
regexp=d{4}-d{2}-d{2}sd{2}:d{2}:d{2}
colours=cyan
-
#IP
regexp=(d{1,3}.){3}d{1,3}(:d{1,5})?
colours=cyan
-
#поля, таблицы и другие системные сущности в символах ` `
regexp=`w+`
colours=yellow
-
#email
regexp=[w.-_]+@[w.-_]+
colours=magenta

Сама утилита grcat написана на питоне, любители смогут подсмотреть код и написать конфиг под свои нужды. Для остальных существует документация man grc и неплохое пособие с примерами.

Конфигурационные файлы доступны на github. Эта же ссылка указана в ответе на упомянутый выше вопрос на StackOverflow

И немного приятностей про mysql-client:

Что еще можно делать с помощью pager:
www.mysqlperformanceblog.com/2008/06/23/neat-tricks-for-the-mysql-command-line-pager/
Установка удобного приветствия в mysql-client:
www.ultraquantix.com/blog/2008/12/making-the-mysql-prompt-more-useful/

Автор: nitso

Поделиться

* - обязательные к заполнению поля