При листании истории смещается позиция начала команды
Я меняю строку приветствия с помощью скрипта в /etc/profile.d/
if [ "$PS1" ]; then
PS1='\u\[\e[0m\]@\h\[[\e[1;31m\]PROD\[\e[0;37m\]]\W\\$ '
fi
Но есть одна проблема когда нажимаешь вверх что бы выполнить предыдущую команду пропадает пробел после $ Вроде мелочь, но глаз дергается, как победить?
ps
OS: CentOS Linux release 8.2.2004 (Core)
Kernel: 4.18.0-147.8.1.el8_1.x86_64
Shell: GNU bash, version 4.4.19(1)-release (x86_64-redhat-linux-gnu)
Ответы (1 шт):
группируя некоторые последовательности символов (обычно это спец-коды для установки цвета) с помощью скобок \[ и \], вы подсказываете библиотеке gnu/readline, что данная последовательность символов при «отрисовке» не будет занимать ни одного знакоместа. это позволяет правильно рассчитывать длину приветствия и при «листании» истории выводить очередную команду в одной и той же позиции.
ошибка ваша находится здесь:
\[[\e[1;31m\]
внутрь группы у вас помещена не только (не занимающая ни одного знакоместа) последовательность \e[1;31m для установки красного цвета текста (31) и «жирного» написания (1), но и символ [, который должен выводиться «как есть», т.е., занимать знакоместо.
просто вынесите этот символ за пределы группы. судя по вашей задумке — перед ней:
[\[\e[1;31m\]
