修改命令提示符 (颜色、格式)

在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


 

posted @ 2022-05-26 23:09  Just_Now  阅读(435)  评论(0编辑  收藏  举报