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?



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

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.


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.


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


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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.