Избегайте терминальных символов от предыдущих терминальных команд

Ну, я думаю, что Вы знаете вполне прилично, о чем я говорю; в противном случае проверьте это видео. В основном при нажатии Вашего массив для получения предыдущей команды, часто символы оставляют на терминале. Там какой-либо путь состоит в том, чтобы обойти проблему?


Править: Этой проблемы не происходит с 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
2
задан 17 May 2016 в 16:37

1 ответ

В bash основная подсказка ($PS1) все непечатаемые символы (например, escape-последовательности, которые изменяют цвет) должны быть включены между литералом \[ и \].

Точно так же для всех других находящихся в readline приложений, такой как gdb, непечатаемые символы в быстрой потребности, которая будет включена между 0x01 и 0x02 байт. Можно обратиться к ним в .gdbinit как \001 и \002.

1
ответ дан 18 May 2016 в 02:37
  • 1
    Если бы Вы могли бы записать в/dev/sdcX и суметь записать через границу раздела, это не был бы dd, что, игнорируя таблицу разделов - это будет драйвер блочного устройства в ядре, являющемся багги и игнорирующем таблицу разделов. – rackandboneman 26 October 2017 в 09:36

Другие вопросы по тегам:

Похожие вопросы: