好吧,我想你很清楚我在说什么;如果没有,请查看这个视频基本上,当您按下 up 数组以获取上一个命令时,字符通常会留在终端上。有什么方法可以规避这个问题吗?
编辑:这个问题不仅在普通终端上发生gdb
,在普通终端上也发生。这应该是.bashrc
if [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt
EDIT2:好的,我将尝试用一个例子来解释。假设您有这个终端历史记录(为了简单起见,相当简化):
user:host$>cd foo/bar
user:host$>sudo apt-get dist-upgrade
user:host$>clear
user:host$>
然后,如果你按向上箭头键 3 次,你会看到类似
user:host$>cd foo/bar
但你得到的却是
user:host $>sudo apcd foo/bar
我必须承认,这是最不有趣的情况;有时屏幕上的马赛克太复杂了,你会想让任何东西崩溃。我不知道是什么原因造成的,我想我可能格式化了文件中的某些内容.bashrc
,但我仍然不知道是什么。
但是,将前面.bashrc
几行改成这样
if [ "$color_prompt" = yes ]; then
PS1='\[\033[1;31m\]\u:\[\033[1;37m\]\W\\$>\[\033[0;32m\]'
PS2='\[\033[1;37m\]>\[\033[0;32m\]'
else
PS1='\u:\W\\$'
PS2='>'
fi
问题部分消失:在正常 shell 中不再发生,但如果我启动,gdb
则大多数情况下都会发生。这与特殊字符有关吗?
EDIT3 以下是文件中的相关行~/.gdbinit
;您可以找到整个文件这里。也许最后一个\]
字符串丢失了,不是吗?
if $USECOLOR == 1
# BLACK
if $arg0 == 0
echo \033[30m
// a lot of other if-else conditions
答案1
bash
在的主提示符 ( )中$PS1
,所有不可打印字符(例如,改变颜色的转义序列)都必须括在文字\[
和之间\]
。
类似地,对于所有其他基于 readline 的应用程序,例如,提示符中的不可打印字符需要用 a和 a字节gdb
括起来。您可以在as和中引用这些。0x01
0x02
.gdbinit
\001
\002