Dấu nhắc màu dòng lệnh MySQL


22

Tôi muốn thêm màu vào dấu nhắc màu của dòng lệnh MySQL.

Tôi đã có một tập lệnh (cơ sở dữ liệu.sh):

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

Tôi muốn rootđược màu đỏ , @màu xanh , localhostmàu xanh lá câydatabaseđược cyan :

root@localhost:database>

Có thể làm điều này trong kịch bản của tôi?



1
Tôi đã nhìn thấy nhưng nó không hoạt động
EscoMaji

Vâng tôi nghĩ nó có thể giống như cách trong dấu nhắc shell thông thường của bạn. Đặt cược tốt nhất của bạn có lẽ là một số trình bao bọc hoặc máy khách MySQL nâng cao hơn.
micke

1
Thiết lập của bạn có hỗ trợ mã thoát ANSI không? Nếu đúng như vậy thì bạn có thể sử dụng chúng theo cách sau: --prompt = "^ [[1; 33mDTHIS PHẦN LÀ TRONG MÀU VÀNG ^ [[0m \ u @ \ h: \ d>"
Hennes

Câu trả lời:


14

Đừng nghe những người nói rằng bạn không thể. Đây:

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

Sau đó:

$ colormysql -hHOSTNAME -uUSERNAME -pPASSWORD ...

Bạn có thể giải thích thêm về lý do tại sao điều này hoạt động, nhưng bạn không thể vượt qua mã ANSI?
Bryan Agee

$(foo)thực hiện kết quả của foo, trong trường hợp này là đầu ra của echo. -E to echo mở rộng \ x1b thành một char thoát. \ X1b [31m là mã điều khiển đầu cuối đặt màu hiện tại thành màu đỏ. Và kể từ đó trở đi. \ x1b [0m trả lại màu cho màu thiết bị đầu cuối mặc định.
Irongaze.com

1
Khi kiểm tra màu sắc, tôi khuyên bạn nên bỏ qua bước bí danh, ví dụ bằng cách thực hiện:mysql --prompt="`echo -e '\033[01;32m\\d\033[01;34m >\033[00m '`"
Puggan Se

4
Ngoài ra, việc thêm mã thoát kèm theo mã màu làm cho công việc này hoạt động chính xác (điều hướng lịch sử sẽ hoạt động mà không khiến dấu nhắc của bạn trở nên lộn xộn) như thế này: $ 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 - Hãy xem nhận xét của @ david-santamaria ở trên, sử dụng \001\002xung quanh các trình tự để được readlinehỗ trợ thích hợp . $ 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 "') Dường như có một số vấn đề kết xuất với sao chép và dán từ trình duyệt, trong đó \002:\001phần lệnh được đưa vào bảng tạm dưới dạng \002:\<200c><200b>001(trong đó <200c><200b>là các ký tự không in, có thể là CR / NL từ word- gói).
năm15

8

Hướng dẫn thiết lập nhắc nhở mysql màu.

Bước 1. Hiểu cách đăng nhập bình thường với một dấu nhắc thiết lập:

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> 

Bước 2. Hiểu cách bạn có thể chuyển một biểu thức được diễn giải thông qua tiếng vang đến 'bí danh':

Mà không chính xác như bước 1 ở trên:

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

Bước 3. Hiểu cách echo -e đánh giá biểu thức được tô màu:

Màu này sẽ nhắc "foobar>" màu đỏ:

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

Như thế này:

nhập mô tả hình ảnh ở đây

Bước 4. Nếu bạn bối rối không biết chuyện gì đang xảy ra ở đây:

Nhìn vào biểu thức: \x1B[31mfoobar>\x1B[0m

Nó có ba phần:

code               what it means:

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

Bước 4. Nâng cao, Hãy làm cho lời nhắc thực sự tốt đẹp:

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

nhập mô tả hình ảnh ở đây

Nếu bạn bối rối về những gì mã lớn này làm:

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

Giải trình:

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.

Thật tuyệt vời Nhiều mã.


1
Bất kỳ ý tưởng nào về cách thoát mã đầu cuối chính xác để readlinekhông bị nhầm lẫn về độ dài dòng và chỉnh sửa nhiều dòng trong dòng mysqllệnh sẽ có thể? (cố gắng viết nhiều dòng, sau đó nhấn và giữ backspace)
cprn

Đây là một câu hỏi tiếp tuyến hoàn toàn riêng biệt nên được hỏi như một câu hỏi stackoverflow riêng biệt. Tất nhiên là có thể với quyền truy cập vào một ngôn ngữ lập trình hoàn chỉnh, nhưng câu hỏi là làm thế nào, tôi không biết mà không đặt vài giờ vào nó.
Eric Leschinski

0

Tôi muốn lời nhắc nằm trong tiêu đề của thiết bị đầu cuối của mình, về cơ bản là vấn đề tương tự như muốn có một dấu nhắc màu, chỉ là một mã thoát khác. Đi qua điều này và tự hỏi liệu tôi có thể làm điều đó mà không cần phải nhớ một bí danh đặc biệt như colormysqlvv được đề cập trong các câu trả lời.

Tôi đã thêm vào những điều sau đây để .bashrcthực hiện thủ thuật trên máy của mình:

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

những gì nó làm là sử dụng echo -eđể tạo các ký tự thoát thô (chứ không phải là ký tự tượng trưng) cho MYSQL_PS1biến. Điều này cũng nên làm việc với màu sắc.


-2

Đó là một câu trả lời khá đáng tiếc, nhưng bạn không thể.


Về việc sử dụng các chuỗi thoát ANSI, MySQL chỉ cho phép như sau :

Bạn có thể sử dụng các chuỗi thoát, phạm vi, dữ liệu, sự kiện, sự kiện, thời gian, giá trị, thời gian, giá trị và giá trị trong các giá trị tùy chọn để thể hiện khoảng lùi, tab, dòng mới, trả về vận chuyển, dấu gạch chéo ngược và ký tự khoảng trắng.


Về câu trả lời cmjdmiller của, GRC chỉ hoạt động để hiển thị đầu ra từ vỏ MySQL thông qua một "pager".


Điều tốt nhất bạn có thể làm là sử dụng rlwrap như thế này : rlwrap -a -p'GREEN' mysql -uroot -hlocalhost -A --prompt="\u@\h:\d> ". Điều này sẽ không cung cấp cho bạn quyền kiểm soát chi tiết tuy nhiên vì nó tô màu toàn bộ dấu nhắc. Cũng hãy cẩn thận vì nó hiển thị mật khẩu trong Cleartext.


Điều này là hết hạn. Có một loạt các giá trị có thể cho tùy chọn kịp thời. Xem tại đây: dev.mysql.com/doc/refman/5.6/en/mysql-commands.html
Irongaze.com


Nó không quá lỗi thời chỉ là sai. đối với một điều, các chuỗi thoát ANSI là một cái gì đó hoàn toàn độc lập với MySQL và đối với một thứ khác, chúng chắc chắn có thể được sử dụng, như được thể hiện trong các câu trả lời khác ở đây.
Jeff
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.