Что не так с этой подсказкой 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
,
3 ответа
Это правильная версия:
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
\[
а также \]
должен использоваться только вокруг частей командной строки, которые не перемещают курсор, несмотря на наличие фактического текста. если __git_ps1
производит любой видимый вывод, тогда это будет десинхронизировать вашу командную строку.
Любой, кто работает с этой проблемой, вот пример, который работал для меня:
ДО:
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\] '
Отмечает все '\\[\\]'
вокруг цветов.