Answers:
这是因为bash认为提示的时间长于实际时间。\e[0;31m
例如,转义序列被终端吸收,依次将以下文本变为红色,但是bash不知道。因此,您必须告诉bash不应在提示的长度中计算该字符序列,而可以通过将其括入来实现\[ \]
。我还建议使用tput而不是对终端转义序列进行硬编码。
red=$(tput setaf 1)
reset=$(tput sgr0)
PS1='\[$red\][\W]\$\[$reset\] '
有关更多信息,请参见BashFAQ 53和终端代码(ANSI / VT100)简介。
\001 \002
。