Что не так с этой командной строкой bash?

Что не так с этой командной строкой bash?

Я использую следующую запись в ~/.bashrcфайле для раскрашивания приглашения и отображения текущей ветки репозитория git:

PS1='\[\e[1;32m\]\[\u@\h\]\[\e[m\] \[\w\]\[\e[1;1m\]\[$(__git_ps1 " (%s)")\] \[\e[1;1m\]\[$\] \[\e[m\]'

Это работает почти нормально, за исключением того, что когда я использую историю bash (клавишу со стрелкой вверх несколько раз), командная строка становится «выпуклой» (неизменными остаются только первые символы приглашения), и видимым становится:

usemmand

когда мое имя пользователя userи команда command.

решение1

\[и \]должен использоваться только в тех частях командной строки, которыенепереместить курсор, несмотря на наличие реального текста. Если __git_ps1выводится какой-либо видимый вывод, то это приведет к десинхронизации вашей командной строки.

решение2

Вот правильная версия:

COLOR1="\[\e[1;32m\]"
COLOR2='\[\e[1;1m\]'
COLOR3='\[\e[m\]'
GIT_STATUS=$(__git_ps1 " %s")
PROMPT_CHAR="$"

PROMPT="${COLOR1}\u@\h${COLOR3} \w${COLOR2}${GIT_STATUS} ${COLOR2}${PROMPT_CHAR} ${COLOR3}"
PS1="$PROMPT"
export PS1

решение3

Если кто-то работает над этой проблемой, вот пример, который помог мне:

ДО:

export PS1="\033[0;33m[\u@\h]\033[1m\e[m \w \033[36m[>>]\033[0m\e[m "

ПОСЛЕ:

export PS1='\[\033[0;34m\][\u@\h]\[\033[1m\e[m\] \w \[\033[35m\][>>]\[\033[0m\e[m\] '

Заметки обо всех '\\[\\]'цветах.

Связанный контент