Проблема PS1, испортить CLI

Возможно, попробуйте это.

Но зависит от аппаратной проводки.

14
задан 11 March 2012 в 00:27

1 ответ

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

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

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

27
ответ дан 25 May 2018 в 13:35
  • 1
    Спасибо за прекрасное описание. У меня была эта проблема несколько раз, и я никогда не знал, где проблема. – Betlista 5 January 2013 в 06:04
  • 2
    +1, то же самое здесь. Для тех, кто слепо тестирует это решение, и он не работает, стоит упомянуть здесь, что есть другой синтаксис, описанный в ссылке BashFAQ для экранирования цветов внутри функций, \001 \002. – Stephen Niedzielski 24 April 2015 в 21:09

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

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