1.问题描述:
使用xshell连接centos7虚拟机之后,为命令提示符设置颜色,也就是在/etc/profile中添加了PS1环境变量的配置,最初我的配置是:
vim /etc/profile
export PS1='[\e[32;1m\u@\e[34;1m\h \e[35;1m\w\e[0m]\$ '
source /etc/profile
重新加载了配置文件,确实有效果,如下图所示:

有了颜色的命令提示符,看着就更爽了,给这黑白界面添加了些许趣味。
伴随而来的不仅是乐趣,还有让人头疼的问题:
1)当在命令行中输入较长的命令时,发现不会自动换行,而是继续覆盖掉该行最前面的命令提示符,然后继续覆盖掉之前输入的命令,直到该行再次被字符填充满才会换行(头疼),如下所示:
输入命令过长时,会覆盖该行前面的字符:

到前面这里看着就不爽了,ctrl+c中断输入。
无聊嘛,继续测试它什么时候会换行(直到该行再次被字符填充满才会换行):

2)当按上下键翻历史命令时,会出现命令显示异常:

通过上下键翻历史命令,它如此显示,这"狗东西"看着让人着实难受嘛!
自从我学会了给命令提示符设置颜色之后(应该说学错了),每次新建虚拟机,我就要设置一下PS1,就是手痒,然后就是上面的问题,直到今天我解决了!!
2.问题的发展之旅
这个问题有两三年的历史了,我心也是够大的。直到今天我再次看到这个现象,我终于是忍不住了,一定要把这个问题给kill掉,要不然我心里难受。(最后发现就是PS1设置不当的问题)
1)怀疑是xshell的问题
我就去网上找,“使用xshell时,当输入命令过长时如何自动换行”
解决办法:右键会话——>属性——>VT模式——>选择“Auto Wrap Mode”
就ok了,没用,因为问题不是因为这个嘛。
我依旧坚信是xshell的问题,然后我依次试了各种属性配置,最后发现将终端类型改为ansi,终于可以换行了,但是翻命令还是显示异常,没办法了,将就吧。

2)怀疑是虚拟机操作系统配置出现问题
今天测试了htop命令,执行该命令之后,如下图:

显示很混乱,就是因为终端类型设置成了ansi,还是得改成linux类型:

这样格式就规整很多了,将终端类型设置为ansi终究不是解决问题的办法,是给自己造问题,不及时将问题正确解决,而是耍小聪明,只会带来越多的问题。
再次确定,xshell属性设置没问题,那么会不会是centos设置有问题,经上网查,是因为给命令提示符设置颜色不当存在的问题。在虚拟机中测试,发现虚拟机也不可以自动换行。
3.解决问题:
1)命令提示符相关知识:
\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时,提示符为:#,普通用户则为:$
2)命令提示符设置颜色:
开始颜色输入:[\e[F;Bm]
结束颜色输入:[\e[0m]
‘F’ 字体颜色(编号30-37)
‘B’ 背景颜色(编号40-47)
‘m’ 表示转义结束
字体颜色 背景颜色 所选颜色
30 40 黑色
31 41 红色
32 42 绿色
33 43 黄色
34 44 蓝色
35 45 紫红色
36 46 青蓝色
37 47 白色
3)修改命令提示符(最终):
export PS1='[\[\e[32;1m\]\u@\[\e[34;1m\]\h \[\e[35;1m\]\w\[\e[0m\]]\$ '
失败的原因就是少用’[]‘将’\e[32;1m’括起来了,记得将不需要显示的中括号用‘\’进行转义,其中PS1的值用单引号或双引号括起来都可以。

如果没有使用PS1设置颜色也就没这么多事。




