我想向MySQL命令行颜色提示添加颜色。
到目前为止,我有一个脚本(database.sh):
mysql -uroot -hlocalhost -A --prompt="\u@\h:\d> "
我想root
将红,@
是蓝色的,localhost
是绿色的,并database
以青色:
root@localhost:database>
是否可以在我的脚本中执行此操作?
我想向MySQL命令行颜色提示添加颜色。
到目前为止,我有一个脚本(database.sh):
mysql -uroot -hlocalhost -A --prompt="\u@\h:\d> "
我想root
将红,@
是蓝色的,localhost
是绿色的,并database
以青色:
root@localhost:database>
是否可以在我的脚本中执行此操作?
Answers:
不要听别人说你做不到的人。这里:
$ 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 ...
$(foo)
执行foo的结果,在这种情况下为echo的输出。echo -e将\ x1b扩展为转义字符。\ x1b [31m是将当前颜色设置为红色的终端控制代码。依此类推。\ x1b [0m将颜色恢复为默认的终端颜色。
mysql --prompt="`echo -e '\033[01;32m\\d\033[01;34m >\033[00m '`"
\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包装)。
步骤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.
哇 很多代码。
readline
混淆行长和在mysql
命令行中编辑多行的任何想法都可以吗?(尝试写多行,然后按住退格键)
这是一个非常不幸的答案,但是你不能。
关于ANSI转义序列的使用,MySQL仅允许以下内容:
您可以在选项值中使用转义序列“ \ b”,“ \ t”,“ \ n”,“ \ r”,“ \”和“ \ s”表示退格键,制表符,换行符,回车符,反斜杠和空格字符。
关于cmjdmiller的答案,grc仅通过“ pager”显示MySQL外壳的输出。
最好的办法是使用rlwrap这样的:
rlwrap -a -p'GREEN' mysql -uroot -hlocalhost -A --prompt="\u@\h:\d> "
。但是,这不会给您细粒度的控制,因为它会使整个提示变色。也要小心,因为它以明文形式显示密码。