Цветовая подсказка командной строки MySQL

22

Я хочу добавить цвета в командную строку цвета MySQL.

У меня пока в скрипте (database.sh):

mysql -uroot -hlocalhost -A --prompt="\u@\h:\d> "

Я хотел бы rootбыть красным , @чтобы быть синим , localhostчтобы быть зелеными и databaseбыть бирюзовыми :

root@localhost:database>

Возможно ли сделать это в моем сценарии?

EscoMaji
источник
1
Я видел это, но это не работает
EscoMaji
Да, я думаю, что это возможно в обычной командной строке. Ваша лучшая ставка, вероятно, какая-то обертка или более продвинутый MySQL-клиент
Мик
1
Поддерживает ли ваша установка управляющие коды ANSI? Если это так, то вы можете использовать их следующим образом: --prompt = "^ [[1; 33mDЭТА ЧАСТЬ ЖЕЛТАЯ ЦВЕТА ^ [[0m \ u @ \ h: \ d>"
Hennes

Ответы:

14

Не слушайте людей, которые говорят, что вы не можете. Вот:

$ alias colormysql=$(echo -e 'mysql --prompt="\x1B[31m\\u\x1B[34m@\x1B[32m\\h\x1B[0m:\x1B[36m\\d>\x1B[0m "')

Затем:

$ colormysql -hHOSTNAME -uUSERNAME -pPASSWORD ...
dossy
источник
Можете ли вы дать более подробное объяснение, почему это работает, но вы не можете просто передать коды ANSI?
Брайан Эйджи
$(foo)выполняет результат foo, в этом случае вывод echo. -E для эха расширяет \ x1b в escape-символ. \ X1b [31m - это код управления терминалом, который устанавливает текущий цвет на красный. И так далее. \ x1b [0m возвращает цвет к цвету терминала по умолчанию.
Irongaze.com
1
при тестировании цветов я рекомендую вам пропустить шаг псевдонима, например:mysql --prompt="`echo -e '\033[01;32m\\d\033[01;34m >\033[00m '`"
Puggan Se
4
Кроме того, добавление escape-кодов, включающих цветовые коды, делает эту работу должным образом (навигация по истории будет работать, не вызывая беспорядка), например: $ alias colormysql = $ (echo -e 'mysql --prompt = "\ 001 \ x1B [31m \ 002 \\ и \ 001 \ x1B [34m \ 002 @ \ 001 \ x1B [32m \ 002 \\ ч \ 001 \ x1B [0м \ 002: \ 001 \ x1B [36m \ 002 \\ d> \ 001 \ x1B [0m \ 002 "')
Дэвид Сантамария
2
@CyprianGuerra - Посмотрите на комментарий @ david-santamaria выше, используя \001и \002вокруг последовательностей для надлежащей readlineподдержки. $ alias colormysql=$(echo -e 'mysql --prompt="\001\x1B[31m\002\\u\001\x1B[34m\002@\001\x1B[32m\002\\h\001\x1B[0m\002:\001\x1B[36m\002\\d>\001\x1B[0m\002 "') Кажется, есть какая-то проблема рендеринга с копированием и вставкой из браузера, когда \002:\001часть команды помещается в буфер обмена как \002:\<200c><200b>001(где <200c>и <200b>являются непечатными символами, вероятно, CR / NL из word- оберточная бумага).
Dossy
8

Пошаговое руководство по настройке цветного приглашения MySQL.

Шаг 1. Поймите, как обычно входить в систему с установленным приглашением:

eric@dev ~ $ mysql --host=yourhost.com -u username --prompt="foobar> " -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 711
Server version: 5.6.19 MySQL Community Server (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

foobar> 

Шаг 2. Поймите, как вы можете передать интерпретированное выражение через echo в 'alias':

Что точно так же, как шаг 1 выше:

eric@dev ~ $ alias penguins=$(echo -e 'mysql --host=yourhost.com -u dev --prompt="foobar> " -p')
eric@dev ~ $ penguins
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 713
Server version: 5.6.19 MySQL Community Server (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

foobar> exit
Bye
eric@dev ~ $

Шаг 3. Понять, как echo -e оценивает раскрашенное выражение:

Это окрашивает подсказку «foobar>» в красный:

alias penguins=$(echo -e 'mysql --host=yourhost.com -u dev --prompt="\x1B[31mfoobar>\x1B[0m " -p')
penguins

Как это:

введите описание изображения здесь

Шаг 4. Если вы не уверены, что здесь происходит:

Посмотрите на выражение: \x1B[31mfoobar>\x1B[0m

Он состоит из трех частей:

code               what it means:

\x1B[31m           Start colorizing, 31m is red.
foobar>            prompt text
\x1B[0m            Stop colorizing.

Шаг 4. Дополнительно. Давайте сделаем подсказку очень приятной:

eric@dev ~ $ alias penguins=$(echo -e 'mysql --host=yourhost.com -u dev --prompt="\x1B[31m\\u\x1B[34m@\x1B[32m\\v\x1B[0m:\x1B[36m\\d>\x1B[0m " -p')
eric@dev ~ $ penguins

введите описание изображения здесь

Если вы не уверены, что делает этот массивный код:

\x1B[31m\\u\x1B[34m@\x1B[32m\\v\x1B[0m:\x1B[36m\\d>\x1B[0m

Объяснение:

Code         Note
\x1B[31m     Start colorizing red
\\u          escape the backslash for passage through echo, and print username
\x1B[34m     Start colorizing dark blue
@            literal at sign
\x1B[32m     Start colorizing green
\\v          escape the backslash for passage through echo, print server version
\x1B[0m      Stop colorizing
:            literal colon
\x1B[36m     Start colorizing cyan
\\d>         Backslash for passage through echo, print default db and >
\x1B[0m      Stop colorizing.

Вот это да. Много кодов.

Эрик Лещинский
источник
1
Любая идея о том, как правильно экранировать коды терминала, чтобы readlineне путать длину строки и возможность редактирования нескольких строк в mysqlкомандной строке? (попробуйте написать несколько строк, затем нажмите и удерживайте клавишу
Backspace
Это совершенно отдельный касательный вопрос, который следует задавать как отдельный вопрос о переполнении стека. Конечно, это возможно с доступом к полноценному языку программирования, но вопрос в том, как, я не знаю, не потратив на это несколько часов.
Эрик Лещинский
0

Я хотел, чтобы подсказка была в заголовке моего терминала, что по сути та же проблема, что и желание цветной подсказки, просто другой escape-код. Наткнулся на это и подумал, смогу ли я сделать это без необходимости запоминать специальный псевдоним, подобный тому, который colormysqlуказан в ответах.

Я добавил следующее к моему, .bashrcчто помогает моей машине:

export MYSQL_PS1=$(echo -e "\033]0;\u@\h [\d]\007\u@\h [\d]> ")

то, что это делает, используется echo -eдля генерирования необработанных управляющих символов (а не символических) для MYSQL_PS1переменной. Это также должно работать с цветами.

Marlies
источник
-2

Это довольно неудачный ответ, но вы не можете.


Что касается использования escape-последовательностей ANSI, MySQL допускает только следующее :

Вы можете использовать escape-последовательности «\ b», «\ t», «\ n», «\ r», «\» и «\ s» в значениях опций для представления возврата на одну позицию, табуляции, новой строки, возврата каретки, обратная косая черта и пробел символов.


Что касается ответа cmjdmiller, в GRC работает только для вывода на экран из оболочки в MySQL через «пейджер».


Лучшее , что вы могли бы сделать , это использовать rlwrap так: rlwrap -a -p'GREEN' mysql -uroot -hlocalhost -A --prompt="\u@\h:\d> ". Однако это не даст вам детального контроля, поскольку раскрасит всю подсказку. Также будьте осторожны, потому что он отображает пароль в текстовом виде.

Орельен Деруано
источник
Это устарело. Есть множество возможных значений для опции подсказки. Смотрите здесь: dev.mysql.com/doc/refman/5.6/en/mysql-commands.html
Irongaze.com
результат для меня в стек-
переполнении
Это не столько устарело, сколько просто неправильно. с одной стороны, escape-последовательности ANSI являются чем-то совершенно независимым от MySQL, а с другой стороны, они, безусловно, могут использоваться, как наглядно продемонстрировано в других ответах здесь.
Джефф