Linux终端shell颜色相关

来自三线的随记

copy from https://blog.csdn.net/wisemale/article/details/82112462

1. Linux登录过程中加载配置文件顺序:

/etc/profile → /etc/profile.d/*.sh → ~/.bash_profile → ~/.bashrc → [/etc/bashrc]

2. Shell命令提示符及颜色是由PS1来配置:

[root@/etc/init.d] echo $PS1
[\[\e[32;40m\]\u@\w]

其中PS1常用的参数含义如下:

\d :#代表日期,格式为weekday month date,例如:"Mon Aug 1"
\H :#完整的主机名称
\h :#仅取主机的第一个名字
\t :#显示时间为24小时格式,如:HH:MM:SS
\T :#显示时间为12小时格式
\A :#显示时间为24小时格式:HH:MM
\u :#当前用户的账号名称
\v :#BASH的版本信息
\w :#完整的工作目录名称
\W :#利用basename取得工作目录名称,所以只会列出最后一个目录
\# :#下达的第几个命令
\$ :#提示字符,如果是root时,提示符为:# ,普通用户则为:$

3. 颜色值设置: PS1中设置字符颜色的格式为:

\033[{F};{B}m    #B列为可选列

\e[{F};{B}m    #B列为可选列
\e[0m # 关闭所有属性

其中“F“为字体颜色,编号为30-37,“B”为背景颜色,编号为40-47。颜色表如下:

F       B
30      40      黑色
31      41      红色
32      42      绿色
33      43      黄色
34      44      蓝色
35      45      紫红色
36      46      青蓝色
37      47      白色

  根据颜色表,套用入字符颜色设置格式中,就可以对linux终端命令行颜色进行个性化设置了。比如要设置命令行的格式为绿字黑底,显示当前用户的账号名称、主机的第一个名字、完整的当前工作目录名称、24小时格式时间,就可以使用如下的命令:

  #PS1='[

\u@\h \w \t]$ '

4. 以笔者的~/.bashrc配置为例:

[root@~]# cat ~/.bashrc 
# .bashrc
 
# User specific aliases and functions
export PS1='[\[\e[32;40m\]\u@\w]\$ '
 
# Source global definitions
if [ -f /etc/bashrc ]; then
	. /etc/bashrc
fi

5. 修改完成后重新加载下~/.bashrc即可生效:


ps

给自己的Linux的PS1变量添加上颜色,比如:

--\e     #an ASCII escape character (八进制 033)  

1、首先是我们要给自己的PS1要显示的颜色部分添加值。

 export PS1='[\033[31m\u\033[0m@\033[32m\h\033[0m \033[35m\W\033[0m]\$'

这样子设置真的很不错,达到了我们的需求,但是他是有问题的,就是比如当你在输入很长的字符串之后,你会发现bash不能自动换行显示,而是覆盖同一行的开头的部分,慢慢的往后覆盖掉一开始输入的内容,这是很不乐观的,否则当我们输入过长的内容时,显示内容是个问题怎么行呢?

初步判断是加上了颜色代码才出现这样的问题,这可能是在PS1环境变量中,颜色代码不适合直接添加至PS1中,所以我们需要进行改正,就是每个颜色代码后都加上 \[ 和 \] 。

例如:

export PS1='[\[\033[31m\]\u\[\033[0m\]@\[\033[32m\]\h\[\033[0m\] \[\033[35m\]\W\[\033[0m\]]\$'

可以看出有多少个颜色代码就要加上多少个  \[  和  \] 才行。这样子设置好之后,这个毛病就没有了,我们继续可以愉快的在终端输入长命令了。