1

Я использую 32-разрядную версию Red Hat 5 (2.6.18-194.26.1.el5).

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

\[me@mymachine tmp]$man mysql

Если я ввожу Ctrl-C и наберу команду еще раз, она выглядит так:

\[me@mymachine tmp]$ man mysql

Это заставляет вспоминать команду и редактировать ее перед повторным вводом настоящей боли. По сути, если я пытаюсь редактировать вызванную команду, мои изменения происходят на одну позицию символа слева (я полагаю) от того, что я вижу на экране. Это немного утомительно для описания, и, кажется, происходит только с командами с большим количеством аргументов.

ОБНОВЛЕНИЕ: содержимое /etc /sysconfig /bash-prompt-screen,

1 #!/bin/bash
2 echo -n $'\033'"_${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}"$'\033\\\\'

и содержимое /etc /bashrc,

 24   screen)
 25     if [ -e /etc/sysconfig/bash-prompt-screen ]; then
 26       PROMPT_COMMAND=/etc/sysconfig/bash-prompt-screen
 27     else
 28     PROMPT_COMMAND='echo -ne "\033_${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}"; echo -ne "\033\\"'
 29     fi
 30     ;;

Я отключил bash-prompt-screen, переименовав его - это исправлено. Вполне возможно, что в последней версии экрана для RHEL 5 есть исправление строки приглашения bash-prompt-screen. Ошибка видна в версии экрана 4.00.03 (FAU) 23 октября 2006 года. (Я заметил обновление в очереди, которое устанавливается, когда я пишу это.)

2 ответа2

1

Ваше приглашение содержит ошибку в своем определении. Это должно быть в форме:

PS1='\[non-printing-sequence\]printing-sequence'

Например:

PS1='\[\033[1;36m\]\u\[\033[0m\]@\[\033[1;34m\]\h\[\033[0m\]\$ '

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

Каким-то образом вы получаете буквальный \[ в выводе. Проверьте литералы и экранированные скобки, чтобы убедиться, что они правильные.

0
/etc/sysconfig/bash-prompt-screen 

имеет дополнительный '\'

Это означает, что нам нужно сократить его до следующего, чтобы лишние «ушли»!

#!/bin/bash
echo -n $'\033'"_${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}"$'\033\\'

Примечание: хорошие новости! Это только настройка экрана.

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