[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

bash prompt光标定位错误



唉,发到水木上被大水淹了,到这儿向xd们讨教一下,看能解决不

使用\[ \]将PS1中的非打印字符串(如\e[0m之类)包裹起来,会在特定情况下
出现光标定位错误

$PS1='$'
$echo -n abc         # 输出abc后不换行
abc$
    ^                # ^所指处为光标位置,正确
                       # web上看因字体的缘故可能没对齐,term下是正确的
$PS1='\[\e[0m\]$'
$echo -n abc
$bc$
 ^                   # 光标定位错误
$PS1='\[\e[0m\]123$'
123$echo -n abc
abc123$
       ^             # 正确

总结起来,如果\[ \]包裹的字符数(\e只算一个字符)超过其余的正常字符数,
就会出现光标定位错误,表现为在正常输出字符串abc以及$PS1后光标退回行首
并再次输出$PS1,从而将先前的输出部分覆盖

$ echo $BASH_VERSION
3.1.11(1)-release

Reply to: