Почему это значение PS1 вызывает неожиданное поведение?

Возможный дубликат:
Почему моя подсказка bash получает прослушивание, когда я просматриваю историю?

Я установил переменную PS1 в .bashrc следующим образом:

PS1='\e[35m[\W]:\e[0m '

Он достиг того, на что он предназначался (измените цвет подсказки, отображающей cwd внутри [] и до cwd , но когда я просматриваю историю своей команды, иногда некоторые команды, которые я перехожу на цикл, присоединяются к приглашению. Например:

 [~]: echo "something" something [~]: date Sun Nov 18 17:07:54 PST 2012 [~]: sudo apt-get install vim ... 

Теперь, скажем, я хочу вернуться к своей echo "something" команде echo "something" , я нажимаю и получаю

 [~]: sudo apt-get install vim 

Я снова нажимаю, и это происходит

 [~]: sudo apt-date 

снова

 [~]: sudo apt-echo "something" 

и если я удалю все в командной строке, нажав backspace, он удалит весь путь назад

 [~]: sudo apt- 

Это не влияет на команду. Например, строка [~]: sudo apt-date будет по-прежнему печатать выходные date и т. Д. Почему это происходит и как я могу достичь желаемого приглашения без побочных эффектов?

One Solution collect form web for “Почему это значение PS1 вызывает неожиданное поведение?”

Что происходит, так это то, что Баш путается о количестве печатных символов в вашем приглашении. Он отправляет последовательности позиционирования курсора на терминал, чтобы правильно позиционировать курсор для ведения истории команд и т. Д. Он должен иметь хорошее представление о том, где на самом деле курсор находится после печати подсказки.

Попробуйте настроить следующее:

 PS1='\[\e[35m\][\W]:\[\e[0m\] ' 

Теперь он должен работать должным образом.

Пары \[ и \] говорят Bash, что материал между ними – это непечатная escape-последовательность и на самом деле не перемещает курсор вперед. Затем он правильно угадает позицию курсора и выполнит правильную замену при прохождении истории команд.

Эту информацию можно найти в информационном узле (bash)Printing a Prompt .

Изменить: в новых версиях bash это изменилось на (bash)Controlling the Prompt .

  • 7z из сценария bash не исключает каталогов
  • диапазон конкретных котов от / etc / hosts до диалогового окна
  • Как pkill из сценария?
  • Как создать дерево процессов?
  • Номер команды Bash (история) в PS1
  • Заменить рабочий каталог на 2 терминала одновременно
  • Вложенные строки в команде bash
  • Как получить подстроку, основанную на индексе другой строки
  • Расширение скобки Bash для удаления части имени файла
  • Опишите подсказку, которую я вижу, когда я впервые зашел на компьютер Linux
  • cp не работает в скрипте, но работает в терминале
  • Linux и Unix - лучшая ОС в мире.