Терминал не работает с подсказкой цвета - PullRequest
1 голос
/ 05 августа 2011

Если я сделаю это:

echo foo
PS1='\e[0;30mtest \e[0m'

, а затем нажимает стрелка вверх * появляется 1005 * test PS1='\e[0;30mtest \e[0m' (как и ожидалось).
Но если я нажимаю стрелка вверх, поэтому у меня должно быть echo foo, это приводит к test PS1='\e[0;3echo foo

Если я установлю PS1 на что-либо, что не включает цвет, это работает:

echo foo
PS1='\e[0;30mtest \e[0m'
PS1='test '
  • тройное нажатие стрелка вверх , в результате echo foo

Примечание: echo foo остается командой, выполняемой при нажатии Enter

Я пробовал это и в iTerm2, и в Apple Terminal.

Почему он это делает и как мне это исправить?

Ответы [ 2 ]

4 голосов
/ 05 августа 2011

Попробуйте:

PS1="\[\e[0;30m\]test \[\e[0m\]"

Используя дополнительные скобки \[ и \], вы сообщаете bash, что у вас есть некоторые непечатаемые символы, которые могут быть неверно истолкованы приВы нажимаете стрелку вверх.

1 голос
/ 05 августа 2011
PS1='\[\e[0;30m\]test \[\e[0m\]'
#    ^^        ^^     ^^     ^^

\[ и \] сообщают bash о непечатных символах;в противном случае он понятия не имеет, насколько длинна ваша подсказка, следовательно, искалеченная подсказка.См. PROMPTING раздел man-страницы bash для более подробной информации.

...