PS1问题,弄乱了CLI


16

我做了一个简单的PS1作业

PS1="\e[0;31m[\W]\$ \e[m "

我要做的就是更改提示色并仅显示相对路径。但是,这会弄乱CLI。例如,当浏览历史记录时,它会裁剪并与显示重叠。当我键入一个长命令时,光标将移动到与提示显示本身重叠的屏幕开头。我做错了什么?

Answers:


30

这是因为bash认为提示的时间长于实际时间。\e[0;31m例如,转义序列被终端吸收,依次将以下文本变为红色,但是bash不知道。因此,您必须告诉bash不应在提示的长度中计算该字符序列,而可以通过将其括入来实现\[ \]。我还建议使用tput而不是对终端转义序列进行硬编码。

red=$(tput setaf 1)
reset=$(tput sgr0)
PS1='\[$red\][\W]\$\[$reset\] '

有关更多信息,请参见BashFAQ 53终端代码(ANSI / VT100)简介


1
感谢您的完美描述,我多次遇到此问题,却不知道问题出在哪里。
Betlista 2013年

+1,这里相同。对于那些盲目地测试该解决方案并且不起作用的人,在这里值得一提的是BashFAQ链接中描述了另一种语法,用于在函数中转义颜色\001 \002
Stephen Niedzielski
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.