MySQL-Eingabeaufforderung für die Befehlszeile


22

Ich möchte der MySQL-Eingabeaufforderung Farben hinzufügen.

Ich habe bisher in einem Skript (database.sh):

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

Ich möchte rootzu rot , @zu blau , localhostzu sein grün und databasesein Cyan :

root@localhost:database>

Kann ich das in meinem Skript machen?



1
Ich habe es gesehen, aber es funktioniert nicht
EscoMaji

Ja, ich denke, es ist auf die gleiche Weise möglich, wie in Ihrer regulären Shell-Eingabeaufforderung. Ihre beste Wette ist wahrscheinlich ein Wrapper oder ein fortgeschrittener MySQL-Client.
micke

1
Unterstützt Ihr Setup ANSI-Escape-Codes? Wenn dies der Fall ist, können Sie sie folgendermaßen verwenden: --prompt = "^ [[1; 33mDieser Teil ist in gelber Farbe ^ [[0m \ u @ \ h: \ d>"
Hennes

Antworten:


14

Hören Sie nicht auf Leute, die sagen, dass Sie nicht können. Hier:

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

Dann:

$ colormysql -hHOSTNAME -uUSERNAME -pPASSWORD ...

Können Sie näher erläutern, warum dies funktioniert, aber Sie können nicht einfach ANSI-Codes übergeben?
Bryan Agee

$(foo)führt das Ergebnis von foo aus, in diesem Fall die Ausgabe von echo. Das -e zum Echo erweitert das \ x1b zu einem Escapezeichen. \ X1b [31m ist ein Terminal-Steuercode, der die aktuelle Farbe auf Rot setzt. Und so weiter. \ x1b [0m setzt die Farbe auf die Standardfarbe des Terminals zurück.
Irongaze.com

1
Wenn Sie Farben testen, empfehle ich, dass Sie den Alias-Schritt überspringen, zum Beispiel, indem Sie mysql --prompt="`echo -e '\033[01;32m\\d\033[01;34m >\033[00m '`"
Folgendes

4
Auch das Hinzufügen von Escape-Codes, die die Farbcodes einschließen, sorgt für eine ordnungsgemäße Funktion (das Navigieren im Verlauf funktioniert, ohne dass Ihre Eingabeaufforderung durcheinander gebracht wird): $ 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 - Schauen Sie sich den obigen Kommentar von @ david-santamaria an und verwenden Sie \001und \002um die Sequenzen, um die richtige readlineUnterstützung zu erhalten. $ 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 "') Es scheint mit einer Art von Rendering - Problem zu sein , das Kopieren und Einfügen , dass aus dem Browser, in dem der \002:\001Teil des Befehls in die Zwischenablage wird gesetzt als \002:\<200c><200b>001(wo <200c>und <200b>ist nicht druckbare Zeichen, wahrscheinlich die CR / NL von Wort- Verpackung).
Dossy

8

Exemplarische Vorgehensweise zum Einrichten einer farbigen MySQL-Eingabeaufforderung.

Schritt 1. Verstehen Sie, wie Sie sich mit einer festgelegten Eingabeaufforderung normal anmelden:

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> 

Schritt 2. Verstehen Sie, wie Sie einen interpretierten Ausdruck durch Echo an 'Alias' weiterleiten können:

Was genau dasselbe macht wie Schritt 1 oben:

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

Schritt 3. Verstehen Sie, wie echo -e den eingefärbten Ausdruck auswertet:

Dies färbt die "foobar>" - Eingabeaufforderung rot:

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

So was:

Bildbeschreibung hier eingeben

Schritt 4. Wenn Sie sich nicht sicher sind, was hier vor sich geht:

Schauen Sie sich den Ausdruck an: \x1B[31mfoobar>\x1B[0m

Es besteht aus drei Teilen:

code               what it means:

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

Schritt 4. Erweitert, Lässt die Eingabeaufforderung wirklich schön machen:

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

Bildbeschreibung hier eingeben

Wenn Sie sich nicht sicher sind, was dieser massive Code bewirkt:

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

Erläuterung:

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.

Also wow. Viele Codes.


1
Sie haben eine Idee, wie Sie Terminalcodes korrekt maskieren können, readlinedamit Sie nicht über die Zeilenlänge und das Bearbeiten mehrerer Zeilen in der mysqlBefehlszeile verwirrt werden? (Versuchen Sie, mehrere Zeilen zu schreiben, und halten Sie die
Rücktaste gedrückt.

Dies ist eine vollständig separate Tangentenfrage, die als separate Stapelüberlauffrage gestellt werden sollte. Natürlich ist es mit Zugang zu einer umfassenden Programmiersprache möglich, aber die Frage ist, wie ich es nicht weiß, ohne ein paar Stunden darauf zu verwenden.
Eric Leschinski

0

Ich wollte, dass die Eingabeaufforderung im Titel meiner Terminals enthalten ist. Dies ist im Wesentlichen das gleiche Problem wie die Angabe einer farbigen Eingabeaufforderung, nur eines anderen Escape-Codes. Kam darüber hinweg und fragte mich, ob ich es tun könnte, ohne mich an einen speziellen Alias ​​wie den colormysqlin den Antworten erwähnten usw. erinnern zu müssen .

Ich habe Folgendes zu meinem hinzugefügt, .bashrcwas den Trick auf meinem Computer bewirkt:

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

Damit werden echo -edie rohen Escape-Zeichen (und nicht die symbolischen) für die MYSQL_PS1Variable generiert . Dies sollte auch mit Farben funktionieren.


-2

Es ist eine ziemlich unglückliche Antwort, aber Sie können nicht.


In Bezug auf die Verwendung von ANSI-Escape-Sequenzen erlaubt MySQL nur Folgendes :

Sie können die Escape-Sequenzen "\ b", "\ t", "\ n", "\ r", "\" und "\ s" in Optionswerten verwenden, um die Rücktaste, Tabulator, Zeilenvorschub, Wagenrücklauf, Backslash und Leerzeichen.


In Bezug auf die Antwort von cmjdmiller funktioniert grc nur, um die Ausgabe der MySQL-Shell über einen "Pager" anzuzeigen.


Das Beste , was Sie tun können , ist die Verwendung rlwrap wie folgt aus : rlwrap -a -p'GREEN' mysql -uroot -hlocalhost -A --prompt="\u@\h:\d> ". Dies gibt Ihnen jedoch keine feinkörnige Kontrolle, da es die gesamte Eingabeaufforderung färbt. Seien Sie auch vorsichtig, da das Kennwort im Klartext angezeigt wird.


Das ist veraltet. Es gibt eine Vielzahl möglicher Werte für die Eingabeaufforderungsoption. Siehe hier: dev.mysql.com/doc/refman/5.6/de/mysql-commands.html
Irongaze.com


Es ist nicht so sehr veraltet als einfach falsch. Zum einen sind ANSI-Escape-Sequenzen völlig unabhängig von MySQL, zum anderen können sie durchaus verwendet werden, wie die anderen Antworten hier ausführlich belegen.
Jeff
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.