20

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

Я до сих пор в сценарии (database.sh):

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

Мне бы хотелось, чтобы root был красным, @ - синим, localhost - зеленым, а database - голубым:

root@localhost:database>

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

4 ответа4

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 ...
7

Пошаговое руководство по настройке цветного приглашения 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.

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

0

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

Я добавил следующее в мой .bashrc который добился цели на моей машине:

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

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

-1

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


Что касается использования 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> " . Однако это не даст вам детального контроля, поскольку раскрасит всю подсказку. Также будьте осторожны, потому что он отображает пароль в текстовом виде.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .