Intereting Posts
Операция невозможна из-за RF-Kill Нет модуля. Найдена ошибка в Linux, но отлично работает в Windows. Есть ли дистрибутив с установщиком, который может автоматически выполнять LVM над LUKS со всем, что при необходимости согласовано? FFMpeg: преобразование GIF в MP4 вызывает ошибку кода. Как удвоить каждую строку и изменить цифры в каждой строке по-разному в Linux? Как определить, какой сервис запускается во время загрузки, отвечает за определенное поведение? Fedora 21 – Проблема после пробуждения после закрытия Связь Red Hat vNIC (Virtual NIC) с физической NIC Профили AppArmor в Docker / LXC Как выйти из панели tint2? Нужно ли luksClose раздел luks моего USB перед отключением его? Есть ли способ показать историю команд, используемых в оболочке? Запустите i3lock с паролем другого пользователя Что такое сигнальные ловушки? Как отключить спам или нежелательную электронную почту из списков электронной почты с помощью Procmail?

Почему это значение 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 и т. Д. Почему это происходит и как я могу достичь желаемого приглашения без побочных эффектов?

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

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

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

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

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

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

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