在Windows的CMD里,只能改变命令提示符整个的颜色,比如你打开Windows输入 color 2 就可以发现CMD页面变成了绿色,也只能改变整体的颜色。
而在Bash里就不一样了,这次我是用git-bash,Linux里Bash也同理。关键的变量是 $PS1 。输入 echo $PS1 即可看到格式。
[root@localhost ~]# echo $PS1 [\u@\h \W]\$ [root@localhost ~]#
这是默认的格式,里面的转义字符意义如下。
\d: # 代表日期,格式为weekdaymonthdate,例如:"MonAug1"
\H: # 完整的主机名称。
\h: # 仅取主机的第一个名字,如上例,则为fc4,.linux则被省略
\t: # 显示时间为24小时格式,如:HH:MM:SS
\T: # 显示时间为12小时格式
\A: # 显示时间为24小时格式:HH:MM
\u: # 当前用户的账号名称
\v: # BASH的版本信息
\w: # 完整的工作目录名称。家目录会以~代替
\W: # 利用basename取得工作目录名称,所以只会列出最后一个目录
\#: # 下达的第几个命令
\$: # 提示字符,如果是root时,提示符为:#,普通用户则为:$
这样默认的代码就容易理解了,而且自然可以随意组合。例如
[root@localhost ~]# export PS1='[\u@\h \t \w]\$ ' [root@localhost 19:40:55 ~]#
接下来才是重点,设置颜色。
首先颜色分前景色和背景色,就是字体的颜色和背景的颜色。比如这些字是红的,而背景是黄的。下面先给出两个表格,用于控制颜色以及效果。
红色 绿色 黄色 蓝色 紫红色 青蓝色 黑色 白色 前景色 31 32 33 34 35 36 30 37 背景色 41 42 43 44 45 46 40 47 控制效果 无彩色 高亮 下划线 闪烁 反显 不可见 代码 0 1 4 5 7 8在PS1中设置字符序列颜色的格式为: \e[C;F;Bm
其中“C”为控制效果,编号如第二个表;“F”为字体颜色,编号30~37;“B”为背景色,编号40~47。
下面讲解一个格式,也是我自己的格式
PS1='[\e[1;32;44m\u@\h\e[1;33m\t\e[1;36m\w\e[0m]\$ '
之所以没有空格显得这么乱是因为中间打空格也会当成一个字符,下面我加上空格分解一下并附上结果图。
[ \e[1;32;44m \u @ \h \e[1;33m \t \e[1;36m \w \e[0m ] \$
第一个左括号是没有继承到颜色属性的,因为颜色属性是往后设置的,而后面的 \e[1;32;44m 代表字符显示为字符为绿色,背景为蓝色,且高亮显示。此时后面的所有字符都被设置为这个格式,直到下一个颜色设置 \e[1;33m ,这两者之间是由第一个设置的。从第二个往后是由第二个设置的,字符为黄色,但第二个没有设置背景,所以第二个设置往后背景还是由第一个设置的,也是蓝色的。到了第三个又改变了,字符变为青蓝色,高亮显示,但背景还是蓝色。最后一个
\e[0m 由于设置了无彩色,所以这个往后就没有彩色了,后面的右括号和$符号变为白色了。如果把这里的0换成8不可见大家可以自己试试。
这里其实没完,如果就这么设置颜色是变了,但是如果你输入命令较长的时候是不会换行的,可以一直输入一个字母试试,这一行到头后会覆盖这一行第一个字符,也就是命令提示符的部分。那么该如何解决呢。答案是将每一个颜色设置用左右括号包起来,当然需要转义,就像这样 \[\e[1;32m\] 。我之所以不打空格分隔开是因为空格也会当作一个字符,就像括号被显示一样,空格也会显示,看你的格式需求吧。将我的PS1变量用括号括起来如下,也就是最终版的。
PS1='[\[\e[1;32;44m\]\u@\h\[\e[1;33m\]\t\[\e[1;36m\]\w\[\e[0m\]]\$ '
永久设置请将PS1变量写入home目录下.bashrc文件,即~/.bashrc
git-bash配置文件在/etc/bash.bashrc