2行bash提示 - 为什么用户可以退回整个第二行,包括提示字符

时间:2014-11-18 01:58:46

标签: bash

我有一个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)

3 个答案:

答案 0 :(得分:2)

您必须在\[...\]中包含所有非打印ANSI转义序列。你错过了最后一个\]

答案 1 :(得分:1)

您错过了最后\]之前的最终m。所有非打印字符周围都需要\[\],但打印字符周围不需要\]和{{1}}。由于您错过了结束{{1}},因此美元符号不会计算为打印字符。

答案 2 :(得分:0)

\n解决问题之前,将您的上一个\$移动到正确位置:

你原来的(领导部分省略)

....\n\[\033[m\$

更改为此(省略了前导部分):

....\[\033[m\n\$