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?
Réponses:
N'écoutez pas les gens qui disent que vous ne pouvez pas. Ici:
Alors:
la source
$(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.mysql --prompt="`echo -e '\033[01;32m\\d\033[01;34m >\033[00m '`"
\001
et\002
autour des séquences pour unreadline
support 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:\001
partie 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).Procédure pas à pas pour configurer l'invite mysql colorisée.
Étape 1. Comprenez comment vous connecter normalement avec une invite définie:
É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:
Étape 3. Comprenez comment echo -e évalue l'expression colorisée:
Cela colore le rouge "foobar>":
Comme ça:
É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:
Étape 4. Avancé, permet de rendre l'invite très agréable:
Si vous n'êtes pas sûr de ce que fait ce code massif:
Explication:
Alors wow. Beaucoup de codes.
la source
readline
ne pas être confus sur la longueur de ligne et de modifier plusieurs lignes enmysql
ligne de commande serait-elle possible? (essayez d'écrire plusieurs lignes, puis appuyez et maintenez la touche retour arrière)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
colormysql
mentionné dans les réponses.J'ai ajouté ce qui suit à mon
.bashrc
qui 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 -e
de générer les caractères d'échappement bruts (plutôt que symboliques) dans laMYSQL_PS1
variable. Cela devrait également fonctionner avec les couleurs.la source
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 :
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.la source