MySQL命令行颜色提示


22

我想向MySQL命令行颜色提示添加颜色。

到目前为止,我有一个脚本(database.sh):

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

我想root@蓝色的localhost绿色的,并database青色

root@localhost:database>

是否可以在我的脚本中执行此操作?



1
我看到了,但它不起作用
EscoMaji 2012年

是的,我认为您的常规shell提示中的a可能与此相同。最好的选择可能是包装器或更高级的MySQL客户端。
micke 2012年

1
您的设置是否支持ANSI转义码?如果有,那么您可以通过以下方式使用它们:--prompt =“ ^ [[1; 33mD该零件的颜色为黄色^ [[0m \ u @ \ h:\ d>”
Hennes

Answers:


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代码?
Bryan Agee

$(foo)执行foo的结果,在这种情况下为echo的输出。echo -e将\ x1b扩展为转义字符。\ x1b [31m是将当前颜色设置为红色的终端控制代码。依此类推。\ x1b [0m将颜色恢复为默认的终端颜色。
Irongaze.com 2014年

1
测试颜色时,我建议您跳过别名步骤,例如通过执行以下操作:mysql --prompt="`echo -e '\033[01;32m\\d\033[01;34m >\033[00m '`"
Puggan Se 2014年

4
还可以添加转义代码并将颜色代码括起来,以使其正常工作(浏览历史记录将不会使您的提示变得混乱),如下所示:$ 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-在上面的@ 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包装)。
dossy 2015年

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步。了解如何通过回显将解释后的表达式传递给'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如何评估彩色表达式:

这会使“ 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命令行中编辑多行的任何想法都可以吗?(尝试写多行,然后按住退格键)
cprn

这是一个完全独立的切线问题,应作为独立的stackoverflow问题提出。当然,访问一种完整的编程语言是可能的,但是问题是,我不花几个小时不知道怎么做。
Eric Leschinski

0

我希望提示符出现在终端的标题中,这与希望使用彩色的提示符本质上是一样的问题,只是一个不同的转义码。遇到了这个问题,想知道我是否可以不必记住colormysql答案中提到的etc之类的特殊别名就能做到这一点。

.bashrc在我的机器上添加了以下技巧:

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

这是用来echo -eMYSQL_PS1变量生成原始转义字符(而不是符号字符)。这也应该适用于颜色。


-2

这是一个非常不幸的答案,但是你不能。


关于ANSI转义序列的使用,MySQL仅允许以下内容

您可以在选项值中使用转义序列“ \ b”,“ \ t”,“ \ n”,“ \ r”,“ \”和“ \ s”表示退格键,制表符,换行符,回车符,反斜杠和空格字符。


关于cmjdmiller的答案,grc仅通过“ pager”显示MySQL外壳的输出。


最好的办法是使用rlwrap这样的: rlwrap -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转义序列完全独立于MySQL,另一方面,它们肯定可以使用,如此处其他答案所充分说明的。
杰夫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.