พรอมต์สีของบรรทัดคำสั่ง MySQL


22

ฉันต้องการเพิ่มสีให้กับ MySQL พร้อมท์สีบรรทัดคำสั่ง

ฉันมีจนถึงตอนนี้ในสคริปต์ (database.sh):

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

ผมอยากrootที่จะสีแดง , @จะเป็นสีฟ้า , localhostจะเป็นสีเขียวและdatabaseจะเป็นสีฟ้า :

root@localhost:database>

เป็นไปได้ไหมที่จะทำสิ่งนี้ในสคริปต์ของฉัน?



1
ฉันเห็นมัน แต่ใช้งานไม่ได้
EscoMaji

ใช่ฉันคิดว่ามันเป็นไปได้เช่นเดียวกับในเปลือกหอยปกติของคุณ ทางออกที่ดีที่สุดของคุณอาจเป็นwrapperหรือลูกค้า MySQL ขั้นสูงขึ้น
micke

1
การตั้งค่าของคุณรองรับรหัสหลบหนี ANSI หรือไม่ ถ้าเป็นเช่นนั้นคุณสามารถใช้วิธีดังต่อไปนี้: --prompt = "^ [[1; 33mDTHIS ส่วนที่อยู่ในสีเหลือง ^] [[0m \ u @ \ h: \ d>"
Hennes

คำตอบ:


14

อย่าฟังคนที่บอกว่าคุณทำไม่ได้ ที่นี่:

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

แล้ว:

$ colormysql -hHOSTNAME -uUSERNAME -pPASSWORD ...

คุณสามารถให้คำอธิบายเพิ่มเติมเกี่ยวกับสาเหตุที่ใช้งานได้ แต่คุณไม่สามารถส่งรหัส ANSI ได้
ไบรอัน Agee

$(foo)เรียกใช้ผลลัพธ์ของ foo ในเอาต์พุตของ echo -e to echo ขยาย \ x1b ไปเป็น char char \ x1b [31m เป็นรหัสควบคุมเทอร์มินัลที่ตั้งค่าสีปัจจุบันเป็นสีแดง และอื่น ๆ \ x1b [0m ส่งคืนสีเป็นสีเทอร์มินัลเริ่มต้น
Irongaze.com

1
เมื่อทำการทดสอบสีฉันขอแนะนำให้คุณข้ามขั้นตอนนามแฝงโดยทำตามขั้นตอนดังนี้:mysql --prompt="`echo -e '\033[01;32m\\d\033[01;34m >\033[00m '`"
Puggan Se

4
นอกจากนี้การเพิ่มรหัสหลบหนีที่ล้อมรอบรหัสสีทำให้การทำงานนี้ถูกต้อง (การนำทางประวัติจะทำงานโดยไม่ทำให้พรอมต์คุณยุ่งเหยิง) เช่นนี้: $ alias colormysql = $ (echo -e 'mysql --prompt = "\ 001 \ x1B [31m \ 002 \\ U \ 001 \ X1B [34m \ 002 @ \ 001 \ X1B [32m \ 002 ชั่วโมง \\ \ 001 \ X1B [0m \ 002 \ 001 \ X1B [36 \ 002 \\ d> \ 001 \ X1B [0m \ 002 "')
David Santamaria

2
@CyprianGuerra - ดูความคิดเห็นของ @ david-santamaria ด้านบนการใช้\001และ\002รอบ ๆ ลำดับสำหรับการreadlineสนับสนุน ที่เหมาะสม $ 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 "') ดูเหมือนว่าจะมีปัญหาในการเรนเดอร์ด้วยการคัดลอกและวางจากเบราว์เซอร์ซึ่ง\002:\001ส่วนของคำสั่งนั้นถูกใส่ลงในคลิปบอร์ดเป็น\002:\<200c><200b>001(โดยที่<200c>และ<200b>ไม่ใช่ตัวอักษรพิมพ์อาจเป็น CR / NL จาก word- ห่อ)
dossy

8

คำแนะนำเกี่ยวกับการตั้งค่าพรอมต์ mysql ที่มีสี

ขั้นตอนที่ 1 เข้าใจวิธีการเข้าสู่ระบบตามปกติด้วยการแจ้งเตือนชุด:

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> 

ขั้นตอนที่ 2 เข้าใจวิธีที่คุณสามารถไพพ์นิพจน์ที่ตีความผ่าน echo ไปยัง 'alias':

ซึ่งทำเช่นเดียวกับขั้นตอนที่ 1 ด้านบน:

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

ขั้นตอนที่ 3. เข้าใจว่า echo -e ประเมินนิพจน์ colorized อย่างไร:

สีนี้จะแสดงพร้อมท์ "foobar>" สีแดง:

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

อย่างนี้:

ป้อนคำอธิบายรูปภาพที่นี่

ขั้นตอนที่ 4 หากคุณสับสนว่าเกิดอะไรขึ้นที่นี่:

ดูการแสดงออก: \x1B[31mfoobar>\x1B[0m

มันมีสามส่วน:

code               what it means:

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

ขั้นตอน 4. ขั้นสูงช่วยทำให้พร้อมท์ที่ดีจริง:

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

ป้อนคำอธิบายรูปภาพที่นี่

หากคุณสับสนว่าโค้ดขนาดใหญ่นี้ทำอะไร:

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

คำอธิบาย:

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.

ดังนั้นว้าว รหัสมาก


1
มีความคิดเกี่ยวกับวิธีการหลีกเลี่ยงรหัสเทอร์มินัลอย่างถูกต้องเพื่อreadlineไม่ให้สับสนเกี่ยวกับความยาวบรรทัดและการแก้ไขหลายบรรทัดในmysqlบรรทัดคำสั่ง (พยายามเขียนหลาย ๆ บรรทัดจากนั้นกด backspace ค้างไว้)
cprn

นี่เป็นคำถามแทนเจนต์ที่แยกจากกันโดยสมบูรณ์ซึ่งควรถามว่าเป็นคำถามสแต็คโอเวอร์โฟลว์แยกต่างหาก แน่นอนว่าเป็นไปได้ด้วยการเข้าถึงภาษาการเขียนโปรแกรมที่สมบูรณ์ แต่คำถามก็คือฉันไม่รู้โดยไม่ต้องใช้เวลาสักสองสามชั่วโมง
Eric Leschinski

0

ฉันต้องการให้พรอมต์อยู่ในชื่อเทอร์มินัลซึ่งเป็นปัญหาเดียวกับที่ต้องการให้พรอมต์สีรหัสการหลบหนีที่แตกต่างกัน มาที่นี่และสงสัยว่าฉันสามารถทำได้โดยไม่ต้องจำชื่อพิเศษเช่นcolormysqlอื่น ๆ ที่กล่าวถึงในคำตอบ

ฉันได้เพิ่มสิ่งต่อไปนี้ใน.bashrcสิ่งที่ไม่หลอกลวงบนเครื่อง:

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

สิ่งนี้ใช้echo -eเพื่อสร้างอักขระ raw escape (แทนอักขระสัญลักษณ์) ให้กับMYSQL_PS1ตัวแปร สิ่งนี้ควรทำงานกับสีด้วย


-2

มันเป็นคำตอบที่ค่อนข้างโชคร้าย แต่คุณทำไม่ได้


เกี่ยวกับการใช้ ANSI escape sequences, MySQL อนุญาตเฉพาะสิ่งต่อไปนี้ :

คุณสามารถใช้ลำดับการยกเว้น“ \ b”,“ \ t”,“ \ n”,“ \ r”,“ \” และ“ \ s” ในค่าตัวเลือกเพื่อแสดง backspace, แท็บ, ขึ้นบรรทัดใหม่, การขึ้นบรรทัดใหม่, เครื่องหมายแบ็กสแลชและอักขระเว้นวรรค


เกี่ยวกับคำตอบของ cmjdmiller, grcใช้เพื่อแสดงผลลัพธ์จากเชลล์ของ MySQL ผ่าน "เพจเจอร์" เท่านั้น


ที่ดีที่สุดที่คุณสามารถทำได้คือการใช้rlwraprlwrap -a -p'GREEN' mysql -uroot -hlocalhost -A --prompt="\u@\h:\d> "เช่นนี้ สิ่งนี้จะไม่ให้การควบคุมแบบละเอียดกับคุณ ระวังให้ดีเพราะมันจะแสดงรหัสผ่านเป็นข้อความธรรมดา


นี่ล้าสมัย มีโฮสต์ของค่าที่เป็นไปได้สำหรับตัวเลือกที่พร้อมท์ ดูที่นี่: dev.mysql.com/doc/refman/5.6/en/mysql-commands.html
Irongaze.com


มันไม่ได้ล้าสมัยอย่างที่คิด สำหรับสิ่งหนึ่งANSI escape sequencesนั้นเป็นสิ่งที่ไม่ขึ้นอยู่กับ MySQL และอีกอย่างสามารถใช้งานได้อย่างแน่นอนดังที่แสดงให้เห็นอย่างเพียงพอในคำตอบอื่น ๆ ที่นี่
Jeff
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.