【BASH】自定义提示符(加上颜色)后导致历史命令「残留」的解决办法

终端 BASH 的默认提示符是没有颜色的。

比如,在 macOS 上,BASH 的默认提示符 PS1 的值是:

$ echo $PS1
\h:\W \u\$

\h代表主机名,\W代表当前目录,\u代表当前用户。(完整列表见man bashPROMPTING小节)

在我的笔记本上,输出的是:Taos-MacBook-Pro:posts tao$,木有颜色。

为了加入颜色,通常的做法是加入ANSI转义字符,这样可以轻松地改变提示符的颜色。

比如,我在.bash_profile里面把PS1改成了如下:

export PS1="\033[31m\W \$\033[m "

这样做能正确地输出颜色。但是在按上/下键浏览历史记录时出现部分字符无法完全清除(残留)的情况,或者在输入命令时换行不正确的情况。

查阅BASH手册及相关Google得知,需要将不可显示的字符包含在一对\[\]之中(这里的\不是转义字符),否则BASH会错误计算命令的长度。

比如我的,应该改成:

export PS1="\\[\033[31m\\]\W \$\\[\033[m\\] "

注意:由于BASH把\作为转义字符,所以为了得到\[\]应该输入\\[\\]

具体原因不是很清楚,可以参考以下链接:

发表于:2018年6月12日,阅读量:115,标签:Bash

版权声明:若非特别注明,本站所有文章均为作者原创,转载请务必注明原文地址。