Bash 提示符加上颜色后导致历史命令残留的解决办法
终端中 Bash Shell 的默认提示符是没有颜色的。
比如,在 macOS 上,BASH 的默认提示符 PS1 的值是:
1 2 |
|
\h代表主机名,\W代表当前目录,\u代表当前用户。完整列表见man bash的PROMPTING小节。
在我的笔记本上,输出的是:Taos-MacBook-Pro:posts tao$,木有颜色。
为了加入颜色,通常的做法是加入ANSI控制/转义字符,这样可以轻松地改变提示符的颜色。
比如,我在.bash_profile里面把PS1改成了如下(其中的 \033 也可以写作 \e 或 \x1b):
1
|
|
这样做能正确地输出颜色。但是在按上/下键浏览历史记录时出现部分字符无法完全清除(残留)的情况,或者在输入命令时换行不正确的情况。
查阅BASH手册及相关Google得知,需要将不可显示的字符包含在一对\[\]之中(这里的\不是转义字符,是需要作为常量字符输入的),否则BASH会错误计算命令的长度。
比如我的应该改成:
1
|
|
注意:由于BASH把\作为转义字符,所以为了得到\[\]应该输入\\[\\]。
具体原因不是很清楚,可以参考以下链接: