我最近通过$PS1变量修改了我的 Bash 提示,以便我可以有颜色。它在我的.bashrc文件中:
PS1="\\[\e[0;32m[\h::\W] >>\e[m "
Run Code Online (Sandbox Code Playgroud)
现在,如果我输入一些东西然后必须退格来清除它,整个提示就会消失。如果我点击进入一个新的出现。
查看关于同一问题的这个问题,我似乎缺少一个右括号。不过,我不知道它会去哪里。
mik*_*erv 12
起初我认为反斜杠会在双引号内自我转义,这就是问题所在,但是,再想一想,"\\["相当于'\['所以情况并非如此 - 它会以这种方式工作。
但真正的问题是,readline不知道有多少字符被绘制到屏幕上,有多少字符在终端转义时被截获。事实上,它可能认为根本没有打印任何提示,因为您的提示基本上由一个开引号的字符串组成。
因此,正如我在评论中指出的,您需要关闭序列。该\[方法在提示中开始非打印转义序列 - 这样readline可以跟踪屏幕上绘制了多少个字符。您还需要像这样结束它:
PS1='\[non-printing terminal escapes here\]'
man bash 2>/dev/null | grep '^ *\\\[' -A5
\[ begin a sequence of non-printing
characters, which could be used to
embed a terminal control sequence
into the prompt
\] end a sequence of non-printing char?
acters
Run Code Online (Sandbox Code Playgroud)