Invite de couleur de ligne de commande MySQL


22

Je veux ajouter des couleurs à l'invite de couleur de la ligne de commande MySQL.

J'ai jusqu'à présent dans un script (database.sh):

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

Je voudrais rootêtre rouge , @être bleu , localhostêtre vert et databaseêtre cyan :

root@localhost:database>

Est-il possible de le faire dans mon script?



1
Je l'ai vu mais cela ne fonctionne pas
EscoMaji

Oui, je pense que c'est possible de la même manière que dans votre invite shell habituelle. Votre meilleur pari est probablement un wrapper ou un client MySQL plus avancé.
micke

1
Votre configuration prend-elle en charge les codes d'échappement ANSI? Si c'est le cas, vous pouvez les utiliser de la manière suivante: --prompt = "^ [[1; 33mD CETTE PARTIE EST EN COULEUR JAUNE ^ [[0m \ u @ \ h: \ d>"
Hennes

Réponses:


14

N'écoutez pas les gens qui disent que vous ne pouvez pas. Ici:

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

Alors:

$ colormysql -hHOSTNAME -uUSERNAME -pPASSWORD ...

Pouvez-vous expliquer davantage pourquoi cela fonctionne, mais vous ne pouvez pas simplement transmettre des codes ANSI?
Bryan Agee

$(foo)exécute le résultat de foo, dans ce cas la sortie d'écho. L'écho -e développe le \ x1b en un caractère d'échappement. Le \ x1b [31m est un code de contrôle de terminal qui définit la couleur actuelle sur rouge. Et ainsi de suite. \ x1b [0m renvoie la couleur à la couleur du terminal par défaut.
Irongaze.com

1
lors du test des couleurs, je vous recommande de sauter l'étape d'alias, par exemple en faisant:mysql --prompt="`echo -e '\033[01;32m\\d\033[01;34m >\033[00m '`"
Puggan Se

4
L'ajout de codes d'échappement contenant les codes de couleur fait que cela fonctionne correctement (la navigation dans l'historique fonctionnera sans gâcher votre invite) comme ceci: $ 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 - Regardez le commentaire de @ david-santamaria ci-dessus, en utilisant \001et \002autour des séquences pour un readlinesupport approprié . $ 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 "') Il semble y avoir une sorte de problème de rendu avec le copier-coller depuis le navigateur, où la \002:\001partie de la commande est placée dans le presse-papiers en tant que \002:\<200c><200b>001(où <200c>et <200b>sont des caractères non imprimables, probablement le CR / NL de word- emballage).
dossy

8

Procédure pas à pas pour configurer l'invite mysql colorisée.

Étape 1. Comprenez comment vous connecter normalement avec une invite définie:

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> 

Étape 2. Comprenez comment vous pouvez diriger une expression interprétée par écho vers «alias»:

Ce qui fait exactement la même chose que l'étape 1 ci-dessus:

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

Étape 3. Comprenez comment echo -e évalue l'expression colorisée:

Cela colore le rouge "foobar>":

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

Comme ça:

entrez la description de l'image ici

Étape 4. Si vous n'êtes pas sûr de ce qui se passe ici:

Regardez l'expression: \x1B[31mfoobar>\x1B[0m

Il se compose de trois parties:

code               what it means:

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

Étape 4. Avancé, permet de rendre l'invite très agréable:

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

entrez la description de l'image ici

Si vous n'êtes pas sûr de ce que fait ce code massif:

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

Explication:

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.

Alors wow. Beaucoup de codes.


1
Une idée sur la façon d'échapper correctement les codes de terminal afin de readlinene pas être confus sur la longueur de ligne et de modifier plusieurs lignes en mysqlligne de commande serait-elle possible? (essayez d'écrire plusieurs lignes, puis appuyez et maintenez la touche retour arrière)
cprn

Il s'agit d'une question tangente complètement distincte qui doit être posée en tant que question de stackoverflow séparée. Bien sûr, c'est possible avec l'accès à un langage de programmation complet, mais la question est de savoir comment, je ne sais pas sans y mettre quelques heures.
Eric Leschinski

0

Je voulais que l'invite soit dans le titre de mes terminaux, ce qui est essentiellement le même problème que de vouloir une invite colorée, juste un code d'échappement différent. Je suis tombé sur cela et je me suis demandé si je pouvais le faire sans avoir à me souvenir d'un alias spécial comme celui colormysqlmentionné dans les réponses.

J'ai ajouté ce qui suit à mon .bashrcqui fait l'affaire sur ma machine:

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

ce que cela fait est echo -ede générer les caractères d'échappement bruts (plutôt que symboliques) dans la MYSQL_PS1variable. Cela devrait également fonctionner avec les couleurs.


-2

C'est une réponse assez malheureuse, mais vous ne pouvez pas.


Concernant l'utilisation des séquences d'échappement ANSI, MySQL autorise uniquement les éléments suivants :

Vous pouvez utiliser les séquences d'échappement "\ b", "\ t", "\ n", "\ r", "\" et "\ s" dans les valeurs des options pour représenter le retour arrière, l'onglet, la nouvelle ligne, le retour chariot, barre oblique inverse et espaces.


Concernant la réponse de cmjdmiller, grc ne fonctionne que pour afficher la sortie du shell de MySQL via un "pager".


Le mieux que vous pouvez faire est d' utiliser rlwrap comme ceci: rlwrap -a -p'GREEN' mysql -uroot -hlocalhost -A --prompt="\u@\h:\d> ". Cependant, cela ne vous donnera pas un contrôle fin car il colorise l'intégralité de l'invite. Faites également attention car il affiche le mot de passe en texte clair.


C'est obsolète. Il existe une multitude de valeurs possibles pour l'option d'invite. Voir ici: dev.mysql.com/doc/refman/5.6/en/mysql-commands.html
Irongaze.com


Ce n'est pas tellement obsolète que juste faux. d'une part, les séquences d'échappement ANSI sont quelque chose de totalement indépendant de MySQL, et d'autre part, elles peuvent certainement être utilisées, comme le démontrent amplement les autres réponses ici.
Jeff
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.