Prompt warna baris perintah MySQL

22

Saya ingin menambahkan warna ke prompt warna baris perintah MySQL.

Sejauh ini saya memiliki skrip (database.sh):

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

Saya ingin rootmenjadi merah , @menjadi biru , localhostmenjadi hijau dan databasemenjadi cyan :

root@localhost:database>

Apakah mungkin untuk melakukan ini dalam skrip saya?

EscoMaji
sumber
1
Saya melihatnya tetapi tidak berhasil
EscoMaji
Ya saya pikir itu mungkin dengan cara yang sama di shell prompt Anda. Taruhan terbaik Anda mungkin beberapa pembungkus atau klien MySQL yang lebih maju.
micke
1
Apakah pengaturan Anda mendukung kode pelarian ANSI? Jika ya, maka Anda dapat menggunakannya dengan cara berikut: --prompt = "^ [[1; 33mBagian ini DALAM WARNA KUNING ^ [[0m \ u @ \ h: \ d>"
Hennes

Jawaban:

14

Jangan dengarkan orang yang mengatakan Anda tidak bisa. Sini:

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

Kemudian:

$ colormysql -hHOSTNAME -uUSERNAME -pPASSWORD ...
buruk
sumber
Bisakah Anda memberikan penjelasan lebih lanjut tentang mengapa ini bekerja, tetapi Anda tidak bisa hanya lulus kode ANSI?
Bryan Agee
$(foo)mengeksekusi hasil foo, dalam hal ini output gema. -E to echo memperluas \ x1b menjadi karakter pelarian. \ X1b [31m adalah kode kontrol terminal yang menetapkan warna saat ini menjadi merah. Dan seterusnya. \ x1b [0m mengembalikan warna ke warna terminal default.
Irongaze.com
1
ketika menguji warna, saya sarankan Anda melewati langkah alias, untuk contoh dengan melakukan:mysql --prompt="`echo -e '\033[01;32m\\d\033[01;34m >\033[00m '`"
Puggan Se
4
Juga menambahkan kode pelarian yang melampirkan kode warna menjadikan ini berfungsi dengan baik (menavigasi riwayat akan berfungsi tanpa membuat Anda berantakan) seperti ini: $ 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 - Lihatlah komentar @ david-santamaria di atas, menggunakan \001dan \002sekitar urutan untuk readlinedukungan yang tepat . $ 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 "') Tampaknya ada beberapa jenis masalah rendering dengan copy-dan-paste yang dari browser, di mana \002:\001bagian dari perintah dimasukkan ke clipboard sebagai \002:\<200c><200b>001(di mana <200c>dan <200b>adalah karakter non-cetak, mungkin CR / NL dari word- pembungkus).
Dossy
8

Panduan tentang cara mengatur prompt mysql berwarna.

Langkah 1. Memahami cara masuk secara normal dengan prompt yang ditetapkan:

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> 

Langkah 2. Memahami bagaimana Anda dapat mem-pipe ekspresi yang ditafsirkan melalui gema ke 'alias':

Yang tidak persis sama dengan langkah 1 di atas:

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

Langkah 3. Pahami bagaimana echo -e mengevaluasi ekspresi berwarna:

Ini warna "foobar>" prompt merah:

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

Seperti ini:

masukkan deskripsi gambar di sini

Langkah 4. Jika Anda bingung apa yang sedang terjadi di sini:

Lihatlah ungkapannya: \x1B[31mfoobar>\x1B[0m

Ini memiliki tiga bagian:

code               what it means:

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

Langkah 4. Advanced, Mari kita buat prompt yang bagus:

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

masukkan deskripsi gambar di sini

Jika Anda bingung apa yang dilakukan kode besar ini:

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

Penjelasan:

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.

Sangat wow. Banyak kode.

Eric Leschinski
sumber
1
Adakah ide tentang cara melepaskan kode terminal dengan benar sehingga readlinetidak akan bingung tentang panjang baris dan mengedit beberapa baris dalam mysqlbaris perintah akan mungkin? (coba tulis beberapa baris, lalu tekan dan tahan backspace)
cprn
Ini adalah pertanyaan singgung yang benar-benar terpisah yang harus ditanyakan sebagai pertanyaan stackoverflow terpisah. Tentu saja mungkin dengan akses ke bahasa pemrograman lengkap turing, tetapi pertanyaannya adalah bagaimana, saya tidak tahu tanpa meletakkan beberapa jam di dalamnya.
Eric Leschinski
0

Saya ingin prompt berada dalam judul terminal saya, yang pada dasarnya masalah yang sama seperti menginginkan prompt berwarna, hanya kode pelarian yang berbeda. Datangi ini dan bertanya-tanya apakah saya bisa melakukannya tanpa harus mengingat alias khusus seperti colormysqldll yang disebutkan dalam jawaban.

Saya telah menambahkan yang berikut ini ke saya .bashrcyang melakukan trik pada mesin saya:

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

apa yang dilakukan adalah digunakan echo -euntuk menghasilkan karakter pelarian mentah (bukan yang simbolis) ke MYSQL_PS1variabel. Ini juga harus bekerja dengan warna.

Marlies
sumber
-2

Ini jawaban yang sangat disayangkan, tetapi Anda tidak bisa.


Mengenai penggunaan urutan pelarian ANSI, MySQL hanya mengizinkan yang berikut :

Anda dapat menggunakan urutan pelarian "\ b", "\ t", "\ n", "\ r", "\", dan "\ s" dalam nilai opsi untuk mewakili ruang mundur, tab, baris baru, carriage return, backslash, dan karakter spasi.


Mengenai jawaban cmjdmiller, grc hanya berfungsi untuk menampilkan output dari shell MySQL melalui "pager".


Yang terbaik yang dapat Anda lakukan adalah menggunakan rlwrap seperti ini: rlwrap -a -p'GREEN' mysql -uroot -hlocalhost -A --prompt="\u@\h:\d> ". Ini tidak akan memberikan Anda kendali yang halus karena akan mewarnai seluruh prompt. Juga hati-hati karena ini menampilkan kata sandi dalam teks yang jelas.

Aurélien Derouineau
sumber
Ini sudah ketinggalan zaman. Ada sejumlah nilai yang mungkin untuk opsi prompt. Lihat di sini: dev.mysql.com/doc/refman/5.6/en/mysql-commands.html
Irongaze.com
hasil untuk saya di stack-over-flow
Shakiba Moshiri
Ini tidak terlalu ketinggalan zaman hanya sebagai salah. untuk satu hal, urutan pelarian ANSI adalah sesuatu yang sepenuhnya independen dari MySQL, dan untuk yang lain, mereka dapat digunakan, seperti ditunjukkan dalam jawaban lain di sini.
Jeff