1

Я использую Ubuntu (10.04) с bash и сталкиваюсь со странной проблемой. После того, как я использую стрелку вверх, чтобы прокрутить историю команд назад и вернуться к одной из более длинных команд (то есть той, у которой достаточно символов для переноса на экране), но затем продолжаю прокручивать вперед или назад, первую 8 или 9 символов этой длинной команды появляются в моей строке ввода.

Эти символы не влияют ни на какую команду, которую я в конце концов введу, но иногда трудно понять, что я пытаюсь набрать.

Сначала это выглядит примерно так:

  name@machine:~$ 

Тогда становится так:

  name@machine:~$ scp -i /h

после прокрутки назад к одной из моих длинных команд scp . Если я тогда введу команду, вот так:

  name@machine:~$ scp -i /hls -l

он выполняет команду: ls -l

Отредактировано, чтобы добавить значение PS1 в моем ~/.bashrc

  PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\033[31;40m\]$(__git_ps1 "[%s]")\[\033[00m\]\$ '

Отредактировано снова, чтобы добавить значение echo $PS1

  \[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\033[31;40m\]$(__git_ps1 "[%s]")\[\033[00m\]\$

3 ответа3

4

Значение вашей переменной PS1 содержит некоторые непечатаемые символы, такие как последовательности для установки цветов. Они должны быть заключены в \[ и \] чтобы они не учитывались, когда Bash вычисляет, где отображать объекты, и перемещает их, когда вы выполняете такие вещи, как прокрутка предыдущих команд. Если вы покажете свой PS1 я могу быть более конкретным.

1

Вы пропустите \[ (тот, что после \w), попробуйте это:

PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[31;40m\]$(__git_ps1 "[%s]")\[\033[00m\]\$ '
0

Когда это происходит:

  • Убедитесь, что окно вашего терминала достаточно широкое.
  • Введите команду: сброс
  • Нажмите control+L.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .