我有一个bash提示符如下:
$ echo $PS1
\[\033[1;31m\]\t \[\033[1;32m\]\u@\[\033[0;32m\]\[\033[4;32m\]\h\[\033[m \[\033[1;36m\]\w \[\033[0;33m\][\!] \[\033[0;36m\]{e=$?}\n\[\033[m\$
01:51:41 dinesh@c1 ~/lab [1030] {e=0}
$
但是如果我输入一些内容然后退格,我可以一直退回到行首,甚至删除“$”。为什么会这样,如何停止退回“$”?
但是,如果我将其更改为:
PS1="LINE1\nLINE 2> "
然后退避停止在提示结束的地方。
GNU bash,版本3.2.51(1)-release(x86_64-suse-linux-gnu)
答案 0 :(得分:2)
您必须在\[...\]
中包含所有非打印ANSI转义序列。你错过了最后一个\]
。
答案 1 :(得分:1)
您错过了最后\]
之前的最终m
。所有非打印字符周围都需要\[
和\]
,但打印字符周围不需要\]
和{{1}}。由于您错过了结束{{1}},因此美元符号不会计算为打印字符。
答案 2 :(得分:0)
在\n
解决问题之前,将您的上一个\$
移动到正确位置:
你原来的(领导部分省略)
....\n\[\033[m\$
更改为此(省略了前导部分):
....\[\033[m\n\$