Цвет и звук — это те небольшие радости, которые могут разукрасить и облегчить будние администратора при постоянной работе с консолью. Вывод цветовой информации регулируется так называемым escape-последовательностями, определяющими среди прочего цвет текста и цвет фона.
Общий вид:
В интернете не раз был встречен вопрос о разукрашивании консоли mysql, но нигде не нашлось рецепта. Только общие слова «может быть состряпать обертку» или «посмотрите в исходном коде». Такой вопрос на StackOverflow жил без ответа более 2 лет! «Жил» было специально употреблено в прошедшем времени, потому что ответ нашелся.
Поможет нам утилита grc. Она доступна в большинстве дистрибутивов и о ней многие знают. Но как обернуть в нее вывод mysql-client?

Утилита grc (Generic Colorizer) — это на самом деле обертка для grcat, которая запускает указанную команду и направляет вывод в grcat согласно конфигу. Нам понадобится непосредственно grcat, для которой будет написан конфиг, а так же небольшая настройка mysql-client.
В чем же проблема просто направить вывод mysql-client в grcat? Или просто использовать
В первом случае мы используем вывод в консоль, и отображается таблица. Во втором — перенаправляем вывод через cat, при этом таблица магическим образом пропадает.
Как подсказал пользователь truezemez в комментарии, табличный вывод можно сохранить с помощью опции
И на помощь приходитчерный плащ чтение документации mysql. Оказывается, в mysql-client можно задать параметр PAGER, который отвечает за вывод результатов на экран. Им-то мы и воспользуемся, прописав туда grcat. Не забываем указать файл с конфигурацией. Вот фрагмент файла ~/.my.cnf:
Не обязательно задавать PAGER в конфиге, можно каждый раз вводить его руками, но это уже на любителя
Все, что нам осталось сделать — это оформить конфиг для grcat, чтобы он распознавал таблицы mysql при выводе и применял к ним цветовую схему. Выше мы указали, что искать его следует по пути ~/.grcat. Конфиг состоит из групп параметров, обязательными являются regexp и colours. Параметры разделяются минусом, а решетка — это комментарии. Утилита проверяет совпадение регулярного выражение с текущей строкой и применяет на результат совпадения указанный цвет. Если в конфигурации указан параметр
Сама утилита grcat написана на питоне, любители смогут подсмотреть код и написать конфиг под свои нужды. Для остальных существует документация
Конфигурационные файлы доступны на github. Эта же ссылка указана в ответе на упомянутый выше вопрос на StackOverflow
И немного приятностей про mysql-client:
Горизонтальная прокрутка результатов
(да и вертикальная тоже, на самом деле) с наводки пользователей nekt и Daedmen:
Флаг -S активирует горизонтальную прокрутку, -R прокидывает цвета.
Еще интересные флаги для less, спасибо пользователю wickedweasel
-F выходит из less, если всё помещается на один экран
-i ignore case для поиска
-n убирает номера строк
-X не очищает экран после выхода из less, что в консоли бывает полезно — видно результаты предыдущего запроса
Что еще можно делать с помощью 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
Общий вид:
\033[Xm, где X — это значение параметра (цифра). Например, echo -ne "\033[34mHELLO" выведет синим цветом «HELLO». Таблицу цветов и других доступных параметров (подчеркивание, мигание и т.п.) можно получить в документации man console_codes в разделе «ECMA-48 Set Graphics Rendition». Обычно поддержка цвета интегрирована в само приложение, но mysql-client не входит в число таких программ. В интернете не раз был встречен вопрос о разукрашивании консоли mysql, но нигде не нашлось рецепта. Только общие слова «может быть состряпать обертку» или «посмотрите в исходном коде». Такой вопрос на StackOverflow жил без ответа более 2 лет! «Жил» было специально употреблено в прошедшем времени, потому что ответ нашелся.
Поможет нам утилита grc. Она доступна в большинстве дистрибутивов и о ней многие знают. Но как обернуть в нее вывод 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, при этом таблица магическим образом пропадает.
Как подсказал пользователь truezemez в комментарии, табличный вывод можно сохранить с помощью опции
--table. В этом случае перенаправление вывода в grc так же будет работать.И на помощь приходит
[mysql] pager = grcat ~/.grcat
Не обязательно задавать PAGER в конфиге, можно каждый раз вводить его руками, но это уже на любителя
mysql> pager grcat ~/.grcat PAGER set to 'grcat ~/.grcat'
Все, что нам осталось сделать — это оформить конфиг для grcat, чтобы он распознавал таблицы mysql при выводе и применял к ним цветовую схему. Выше мы указали, что искать его следует по пути ~/.grcat. Конфиг состоит из групп параметров, обязательными являются regexp и colours. Параметры разделяются минусом, а решетка — это комментарии. Утилита проверяет совпадение регулярного выражение с текущей строкой и применяет на результат совпадения указанный цвет. Если в конфигурации указан параметр
count=stop, то при совпадении регулярного выражения программа переходит к следующей строке выводимого текста. При отсутствии count=stop указанные настройки применяются последовательно. Вот такой может получится конфигурация:#разделители строк для вертикального вывода результатов с помощью \G regexp=[*]+.+[*]+ count=stop colours=white - #границы таблиц regexp=[+\-|]+ colours=red - #цвет текста по умолчанию regexp=[\w\.]+ colours=green - #текст в скобках ( ) и кавычках ' ' regexp=\([\w\d,']+\) colours=white - #числа regexp=\s[\d\.]+\s colours=yellow - #имена полей при вертикальном выводе с помощью \G regexp=\w+: colours=white - #даты regexp=\d{4}-\d{2}-\d{2}\s\d{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:
Горизонтальная прокрутка результатов
(да и вертикальная тоже, на самом деле) с наводки пользователей nekt и Daedmen:
pager = grcat ~/.grcat | less -RSФлаг -S активирует горизонтальную прокрутку, -R прокидывает цвета.
Еще интересные флаги для less, спасибо пользователю wickedweasel
-F выходит из less, если всё помещается на один экран
-i ignore case для поиска
-n убирает номера строк
-X не очищает экран после выхода из less, что в консоли бывает полезно — видно результаты предыдущего запроса
Что еще можно делать с помощью 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
