Колірний рядок командного рядка MySQL


22

Я хочу додати кольори до кольорового рядка командного рядка MySQL.

Я поки що в сценарії (database.sh):

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

Я хотів би rootбути корисним , @щоб бути синім , localhostщоб бути зеленими і databaseбути бірюзовими :

root@localhost:database>

Чи можливо це зробити за моїм сценарієм?



1
Я бачив це, але це не працює
EscoMaji

Так, я думаю, що це можливо так само, як у вашому звичайному запиті оболонки. Ваша найкраща ставка - це, мабуть, якась обгортка або більш просунутий MySQL-клієнт.
micke

1
Чи підтримує ваша програма налаштування ANSI-кодів виходу? Якщо це так, ви можете використовувати їх наступним чином: --prompt = "^ [[1; 33mDTHIS ЧАСТИНА В ЖЕЛТИЙ КОЛЕР ^ [[0m \ u @ \ h: \ d>" "
Хеннес,

Відповіді:


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

Чи можете ви дати більше пояснень, чому це працює, але ви не можете просто передати ANSI-коди?
Брайан Егей

$(foo)виконує результат foo, в цьому випадку результат ехо. -E для відлуння розширює \ x1b на діаграму втечі. \ X1b [31m - код управління терміналом, який встановлює поточний колір червоним. І так далі. \ x1b [0m повертає колір до стандартного кольору терміналу.
Irongaze.com

1
під час тестування кольорів я рекомендую вам пропустити крок псевдоніма, наприклад, виконавши:mysql --prompt="`echo -e '\033[01;32m\\d\033[01;34m >\033[00m '`"
Пугган,

4
Крім того, додавання кодів евакуації, що додають коди кольорів, роблять цю роботу належним чином (навігація по історії працюватиме, не роблячи ваш запит безладною) так: $ 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 [0м \ 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- обгортання).
досьє

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. Розумійте, як можна передавати інтерпретований вираз через відлуння до "псевдоніму":

Що робить точно так само, як і на кроці 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було б можливим редагування декількох рядків у командному рядку? (спробуйте написати кілька рядків, потім натисніть і утримуйте
зворотну простір

Це абсолютно окреме дотичне запитання, яке слід задавати як окреме запитання про потоковий процес. Звичайно, це можливо з доступом до цілковитої мови програмування, але питання полягає в тому, як я не знаю, не вкладаючи в нього кілька годин.
Ерік Лещинський

0

Я хотів, щоб запит був у заголовку моїх терміналів, що по суті є тією ж проблемою, що і бажати кольорового підказки, просто інший код евакуації. Я підійшов до цього і поцікавився, чи можу я це зробити, не запам'ятовуючи спеціального псевдоніма, як і colormysqlт.д.

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

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

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


-2

Це дуже прикро відповідь, але ви не можете.


Що стосується використання послідовностей виходу ANSI, MySQL дозволяє лише наступне :

Ви можете використовувати послідовності відхилення "\ 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/uk/mysql-commands.html
Irongaze.com

результат для мене на стек-
перелив

Це не стільки застаріло, скільки просто неправильно. з одного боку, послідовності втечі ANSI є чимось цілком незалежним від MySQL, а для іншого їх, безумовно, можна використовувати, як це чітко продемонстровано в інших відповідях тут.
Джефф
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.