Kolor wiersza polecenia MySQL

22

Chcę dodać kolory do wiersza kolorów MySQL w wierszu polecenia.

Do tej pory mam w skrypcie (database.sh):

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

Chciałbym rootbyć czerwony , @aby być niebieski , localhostaby być zielone i databasebyć cyan :

root@localhost:database>

Czy można to zrobić w moim skrypcie?

EscoMaji
źródło
1
Widziałem to, ale to nie działa
EscoMaji
Tak, myślę, że jest to możliwe w taki sam sposób, jak w zwykłym poleceniu powłoki. Twój najlepszy zakład to prawdopodobnie opakowanie lub bardziej zaawansowany klient MySQL.
Mick
1
Czy Twoja konfiguracja obsługuje kody ucieczki ANSI? Jeśli tak, możesz użyć ich w następujący sposób: --prompt = "^ [[1; 33m CZĘŚĆ JEST W ŻÓŁTYM KOLORZE ^ [[0m \ u @ \ h: \ d>"
Hennes

Odpowiedzi:

14

Nie słuchaj ludzi, którzy mówią, że nie możesz. Tutaj:

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

Następnie:

$ colormysql -hHOSTNAME -uUSERNAME -pPASSWORD ...
dossy
źródło
Czy możesz podać jakieś wyjaśnienie, dlaczego to działa, ale nie możesz po prostu przekazać kodów ANSI?
Bryan Agee,
$(foo)wykonuje wynik foo, w tym przypadku wynik echa. -E to echo rozwija \ x1b do znaku zmiany znaczenia. \ X1b [31m to kod kontrolny terminala, który ustawia bieżący kolor na czerwony. I tak dalej. \ x1b [0m przywraca domyślny kolor terminala.
Irongaze.com
1
podczas testowania kolorów, mysql --prompt="`echo -e '\033[01;32m\\d\033[01;34m >\033[00m '`"
zalecam
4
Również dodanie kodów specjalnych otaczających kody kolorów sprawia, że ​​działa to poprawnie (poruszanie się po historii będzie działać bez powodowania bałaganu): $ 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 "')
David Santamaria
2
@CyprianGuerra - Spójrz na komentarz @ david-santamaria powyżej, używając \001i \002wokół sekwencji dla właściwego readlinewsparcia. $ 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 "') Wygląda na to, że występuje problem z renderowaniem podczas kopiowania i wklejania w przeglądarce, gdzie \002:\001część polecenia jest umieszczana w schowku jako \002:\<200c><200b>001(gdzie <200c>i <200b>są znakami, które nie drukują, prawdopodobnie CR / NL z word- zawijanie).
ponury
8

Przewodnik dotyczący konfigurowania pokolorowanego monitu mysql.

Krok 1. Dowiedz się, jak normalnie zalogować się za pomocą ustawionego monitu:

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> 

Krok 2. Dowiedz się, w jaki sposób możesz potokować interpretowane wyrażenie poprzez echo do „aliasu”:

Co robi dokładnie to samo, co krok 1 powyżej:

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 ~ $

Krok 3. Zrozum, jak echo -e ocenia pokolorowane wyrażenie:

To koloruje podpowiedź „foobar>” czerwony:

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

Lubię to:

wprowadź opis zdjęcia tutaj

Krok 4. Jeśli jesteś zdezorientowany, co się tutaj dzieje:

Spójrz na wyrażenie: \x1B[31mfoobar>\x1B[0m

Składa się z trzech części:

code               what it means:

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

Krok 4. Zaawansowane, Sprawmy, aby monit był naprawdę miły:

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

wprowadź opis zdjęcia tutaj

Jeśli masz wątpliwości co do tego, co robi ten ogromny kod:

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

Wyjaśnienie:

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.

Więc wow. Wiele kodów.

Eric Leschinski
źródło
1
Czy readlinebyłby jakiś pomysł, jak poprawnie uciec kody terminala, aby nie pomylić długości linii i edytować wiele linii w linii mysqlpoleceń? (spróbuj napisać wiele wierszy, a następnie naciśnij i przytrzymaj klawisz Backspace)
cprn
Jest to całkowicie odrębne pytanie styczne, które należy zadać jako osobne pytanie dotyczące przepływu stosu. Oczywiście jest to możliwe dzięki dostępowi do kompletnego języka programowania, ale pytanie brzmi: nie wiem, nie poświęcając na to kilku godzin.
Eric Leschinski,
0

Chciałem, aby podpowiedź znajdowała się w tytule moich terminali, co jest w zasadzie takim samym problemem, jak podbicie kolorowego podpowiedzi, po prostu inny kod ucieczki. Przeszedłem przez to i zastanawiałem się, czy mógłbym to zrobić bez konieczności pamiętania specjalnego aliasu, takiego jak colormysqlitp., Wspomnianego w odpowiedziach.

Dodałem następujące, .bashrcktóre rozwiązują problem na moim komputerze:

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

służy to echo -edo generowania nieprzetworzonych znaków zmiany znaczenia (zamiast symbolicznych) do MYSQL_PS1zmiennej. Powinno to również działać z kolorami.

Marlies
źródło
-2

To dość niefortunna odpowiedź, ale nie możesz.


W odniesieniu do stosowania sekwencje ANSI MySQL pozwala tylko następujące :

Możesz użyć sekwencji ucieczki „\ b”, „\ t”, „\ n”, „\ r”, „\” i „\ s” w wartościach opcji do przedstawienia znaku cofania, tabulacji, nowego wiersza, powrotu karetki, ukośnik odwrotny i spacje.


Jeśli chodzi o odpowiedź cmjdmillera, grc działa tylko w celu wyświetlenia danych wyjściowych z powłoki MySQL poprzez „pager”.


Najlepiej można zrobić jest użycie rlwrap tak: rlwrap -a -p'GREEN' mysql -uroot -hlocalhost -A --prompt="\u@\h:\d> ". Nie daje to jednak drobiazgowej kontroli, ponieważ koloruje cały monit. Bądź również ostrożny, ponieważ wyświetla hasło w postaci czystego tekstu.

Aurélien Derouineau
źródło
To jest przeterminowane. Istnieje wiele możliwych wartości opcji pytania. Zobacz tutaj: dev.mysql.com/doc/refman/5.6/en/mysql-commands.html
Irongaze.com
wynik dla mnie po przepełnieniu stosu
Shakiba Moshiri
To nie tyle nieaktualne, co po prostu złe. z jednej strony sekwencje specjalne ANSI są czymś całkowicie niezależnym od MySQL, a z drugiej strony można je z pewnością wykorzystać, co obszernie pokazano w innych odpowiedziach tutaj.
Jeff