避免使用先前的终端命令中的终端字符

避免使用先前的终端命令中的终端字符

好吧,我想你很清楚我在说什么;如果没有,请查看这个视频基本上,当您按下 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和中引用这些。0x010x02.gdbinit\001\002

相关内容