Ну, я думаю, что Вы знаете вполне прилично, о чем я говорю; в противном случае проверьте это видео. В основном при нажатии Вашего массив для получения предыдущей команды, часто символы оставляют на терминале. Там какой-либо путь состоит в том, чтобы обойти проблему?
Править: Этой проблемы не происходит с 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
Это - наименее забавный сценарий, с которым можно закончить, я должен признать; иногда существует столь сложный mosaico на экране, что Вы хотите разрушить что-либо. Я не знаю, который является причиной, я думаю, что, вероятно, плохо отформатировал что-то в .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
проблема частично исчезает: этого не происходит больше в нормальной оболочке, но если я запускаюсь gdb
например, это происходит большую часть времени. Это может быть связано со специальными символами?
EDIT3 Здесь являются соответствующими строками в ~/.gdbinit
файл; можно найти целый файл здесь. Возможно, финал \]
строка отсутствует, не так ли?
if $USECOLOR == 1
# BLACK
if $arg0 == 0
echo \033[30m
// a lot of other if-else conditions
В bash
основная подсказка ($PS1
) все непечатаемые символы (например, escape-последовательности, которые изменяют цвет) должны быть включены между литералом \[
и \]
.
Точно так же для всех других находящихся в readline приложений, такой как gdb
, непечатаемые символы в быстрой потребности, которая будет включена между 0x01
и 0x02
байт. Можно обратиться к ним в .gdbinit
как \001
и \002
.