Я выполнил простое задание PS1
PS1="\e[0;31m[\W]\$ \e[m "
Все, что я хотел сделать, это изменить цвет подсказки и отобразить только относительный путь. Однако это портит CLI. Например, при просмотре истории с помощью ↑
она обрезается и накладывается на экран. Когда я набираю длинную команду, курсор перемещается в начало экрана, перекрывающегося с самим отображением подсказки. Что я сделал не так?
Это потому, что bash считает, что приглашение длиннее, чем оно есть. Например, escape-последовательность \e[0;31m
засасывается терминалом, который, в свою очередь, окрашивает следующий текст в красный, но bash этого не знает. Итак, вы должны сказать bash, что эта последовательность символов не должна учитываться в длине приглашения, и вы делаете это, заключив ее в \[ \]
. Я также рекомендую использовать tput вместо управляющих последовательностей терминала.
red=$(tput setaf 1)
reset=$(tput sgr0)
PS1='\[$red\][\W]\$\[$reset\] '
Подробнее см. BashFAQ 53 и Коды клемм (ANSI / VT100) .