Prompt dei colori della riga di comando di MySQL


22

Voglio aggiungere colori al prompt dei colori della riga di comando di MySQL.

Finora ho uno script (database.sh):

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

Vorrei rootessere colore rosso , @per essere blu , localhostper essere verde e databasedi essere ciano :

root@localhost:database>

È possibile farlo nella mia sceneggiatura?



1
L'ho visto ma non funziona
EscoMaji

Sì, penso che sia possibile allo stesso modo di un normale prompt della shell. La tua scommessa migliore è probabilmente un wrapper o un client MySQL più avanzato.
micke,

1
La tua configurazione supporta i codici di escape ANSI? Se lo fa, puoi usarli nel modo seguente: --prompt = "^ [[1; 33mQuESTA PARTE È DI COLORE GIALLO ^ [[0m \ u @ \ h: \ d>"
Hennes

Risposte:


14

Non ascoltare le persone che dicono che non puoi. Qui:

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

Poi:

$ colormysql -hHOSTNAME -uUSERNAME -pPASSWORD ...

Puoi dare qualche spiegazione in più sul perché questo funziona, ma non puoi semplicemente passare i codici ANSI?
Bryan Agee,

$(foo)esegue il risultato di foo, in questo caso l'output dell'eco. -E to echo espande \ x1b in un carattere di escape. \ X1b [31m è un codice di controllo del terminale che imposta il colore corrente su rosso. E così via. \ x1b [0m riporta il colore al colore terminale predefinito.
Irongaze.com

1
durante il test dei colori, ti consiglio di saltare il passaggio alias, per esempio facendo:mysql --prompt="`echo -e '\033[01;32m\\d\033[01;34m >\033[00m '`"
Puggan Se

4
Anche l'aggiunta di codici di escape che racchiudono i codici colore fa sì che funzioni correttamente (la navigazione nella cronologia funzionerà senza confondere il tuo prompt) in questo modo: $ 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 - Guarda il commento di @ david-santamaria sopra, usando \001e \002intorno alle sequenze per un readlinesupporto adeguato . $ 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 "') Sembra esserci un qualche tipo di problema di rendering con il copia e incolla dal browser, in cui la \002:\001parte del comando viene inserita negli appunti come \002:\<200c><200b>001(dove <200c>e <200b>sono caratteri non stampabili, probabilmente CR / NL da word- wrapping).
dossy

8

Procedura dettagliata sulla configurazione del prompt mysql colorato.

Passaggio 1. Scopri come accedere normalmente con un prompt impostato:

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> 

Passaggio 2. Capire come è possibile reindirizzare un'espressione interpretata tramite l'eco a "alias":

Che fa esattamente lo stesso del passaggio 1 sopra:

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

Passaggio 3. Comprendere come l'eco valuta l'espressione colorata:

Questo colora il prompt "foobar>" in rosso:

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

Come questo:

inserisci qui la descrizione dell'immagine

Passaggio 4. Se si è confusi su ciò che sta succedendo qui:

Guarda l'espressione: \x1B[31mfoobar>\x1B[0m

Ha tre parti:

code               what it means:

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

Passaggio 4. Avanzato, consente di rendere il prompt davvero piacevole:

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

inserisci qui la descrizione dell'immagine

Se sei confuso su ciò che fa questo enorme codice:

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

Spiegazione:

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.

Quindi wow. Molti codici.


1
Qualche idea su come sfuggire correttamente ai codici terminali in modo da readlinenon essere confusi sulla lunghezza della linea e modificare più linee nella mysqlriga di comando sarebbe possibile? (prova a scrivere più righe, quindi tieni premuto backspace)
cprn

Questa è una domanda tangente completamente separata che dovrebbe essere posta come una domanda stackover separata. Ovviamente è possibile con l'accesso a un linguaggio di programmazione completo turing, ma la domanda è come, non lo so senza dedicarci alcune ore.
Eric Leschinski,

0

Volevo che il prompt fosse nel titolo dei miei terminali, che è essenzialmente lo stesso problema di volere un prompt colorato, solo un diverso codice di escape. Mi sono imbattuto in questo e mi chiedevo se potevo farlo senza dover ricordare uno pseudonimo speciale come quello colormysqlecc. Menzionato nelle risposte.

Ho aggiunto quanto segue al mio .bashrcche fa il trucco sulla mia macchina:

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

ciò che fa è usare echo -eper generare i caratteri di escape grezzi (piuttosto che quelli simbolici) nella MYSQL_PS1variabile. Questo dovrebbe funzionare anche con i colori.


-2

È una risposta piuttosto sfortunata, ma non puoi.


Per quanto riguarda l'uso delle sequenze di escape ANSI, MySQL consente solo quanto segue :

Puoi utilizzare le sequenze di escape "\ b", "\ t", "\ n", "\ r", "\" e "\ s" nei valori delle opzioni per rappresentare backspace, tab, newline, ritorno a capo, barra rovesciata e caratteri spaziali.


Per quanto riguarda la risposta di cmjdmiller, grc funziona solo per visualizzare l'output della shell di MySQL attraverso un "cercapersone".


Il meglio che si possa fare è uso rlwrap in questo modo: rlwrap -a -p'GREEN' mysql -uroot -hlocalhost -A --prompt="\u@\h:\d> ". Questo non ti darà comunque un controllo accurato poiché colora l'intero prompt. Fai anche attenzione perché mostra la password in chiaro.


Questo è scaduto. Esistono numerosi valori possibili per l'opzione prompt. Vedi qui: dev.mysql.com/doc/refman/5.6/en/mysql-commands.html
Irongaze.com


Non è tanto antiquato quanto semplicemente sbagliato. da un lato, le sequenze di escape ANSI sono qualcosa di completamente indipendente da MySQL e, dall'altro, possono certamente essere utilizzate, come ampiamente dimostrato nelle altre risposte qui.
Jeff,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.