Проблема PS1, портящая CLI

Я выполнил простое задание PS1

PS1="\e[0;31m[\W]\$ \e[m "

Все, что я хотел сделать, это изменить цвет подсказки и отобразить только относительный путь. Однако это портит CLI. Например, при просмотре истории с помощью она обрезается и накладывается на экран. Когда я набираю длинную команду, курсор перемещается в начало экрана, перекрывающегося с самим отображением подсказки. Что я сделал не так?

16
задан 10 March 2012 в 22:27

1 ответ

Это потому, что bash считает, что приглашение длиннее, чем оно есть. Например, escape-последовательность \e[0;31m засасывается терминалом, который, в свою очередь, окрашивает следующий текст в красный, но bash этого не знает. Итак, вы должны сказать bash, что эта последовательность символов не должна учитываться в длине приглашения, и вы делаете это, заключив ее в \[ \]. Я также рекомендую использовать tput вместо управляющих последовательностей терминала.

red=$(tput setaf 1)
reset=$(tput sgr0)
PS1='\[$red\][\W]\$\[$reset\] '

Подробнее см. BashFAQ 53 и Коды клемм (ANSI / VT100) .

0
ответ дан 10 March 2012 в 22:27

Другие вопросы по тегам:

Похожие вопросы: