MySQL 命令行颜色提示

Esc*_*aji 23 mysql colors prompt

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

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

mysql -uroot -hlocalhost -A --prompt="\u@\h:\d> "
Run Code Online (Sandbox Code Playgroud)

我想root变成红色@变成蓝色localhost变成绿色database变成青色

root@localhost:database>
Run Code Online (Sandbox Code Playgroud)

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

dos*_*ssy 14

不要听那些说你不能的人。这里:

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

然后:

$ colormysql -hHOSTNAME -uUSERNAME -pPASSWORD ...
Run Code Online (Sandbox Code Playgroud)

  • 还添加包含颜色代码的转义代码使其正常工作(导航历史记录将正常工作,而不会使您的提示变得一团糟),如下所示: $ 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"') (5认同)
  • @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)。 (3认同)

Eri*_*ski 8

设置彩色 mysql 提示的演练。

Step 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> 
Run Code Online (Sandbox Code Playgroud)

步骤 2. 了解如何通过 echo 将解释的表达式传送到“别名”:

这与上面的步骤 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 ~ $
Run Code Online (Sandbox Code Playgroud)

步骤 3. 了解 echo -e 如何计算着色表达式:

这将“foobar>”提示着色为红色:

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

像这样:

在此处输入图片说明

第 4 步。 如果您对这里发生的事情感到困惑:

看表情: \x1B[31mfoobar>\x1B[0m

它分为三个部分:

code               what it means:

\x1B[31m           Start colorizing, 31m is red.
foobar>            prompt text
\x1B[0m            Stop colorizing.
Run Code Online (Sandbox Code Playgroud)

第 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
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

如果您对这段庞大代码的作用感到困惑:

\x1B[31m\\u\x1B[34m@\x1B[32m\\v\x1B[0m:\x1B[36m\\d>\x1B[0m
Run Code Online (Sandbox Code Playgroud)

解释:

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.
Run Code Online (Sandbox Code Playgroud)

所以哇。很多代码。


小智 -2

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

\n\n


\n关于 ANSI 转义序列的使用,MySQL 只允许以下操作

\n\n
\n

您可以使用转义序列 \xe2\x80\x9c\\b\xe2\x80\x9d、\xe2\x80\x9c\\t\xe2\x80\x9d、\xe2\x80\x9c\\n\xe2\ x80\x9d、\xe2\x80\x9c\\r\xe2\x80\x9d、\xe2\x80\x9c\\\xe2\x80\x9d 和 \xe2\x80\x9c\\s\xe2\x80\选项值中的 x9d 表示退格键、制表符、换行符、回车符、反斜杠和空格字符。

\n
\n\n


\n关于 cmjdmiller\ 的答案,grc只能通过“寻呼机”显示 MySQL shell 的输出。

\n\n


\n你能做的最好的就是像这样使用rlwraprlwrap -a -p\'GREEN\' mysql -uroot -hlocalhost -A --prompt="\\u@\\h:\\d> " :\n 。然而,这不会为您提供细粒度的控制,因为它会使整个提示着色。另请注意,因为它以明文形式显示密码。

\n