这个bash提示符有什么问题?

我在~/.bashrc文件中使用以下条目来着色提示并显示git仓库的当前分支:

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

这工作得很好,除了当我使用bash历史logging(向上箭头键几次),命令行变成“缩进”(只是提示的第一个字符保持不变),可见性是:

 usemmand 

当我的用户名是user和命令是command

\[\]应该只用在命令提示符不会超前的部分,尽pipe有实际的文本。 如果__git_ps1产生任何可见的输出,那么这将使你的命令行失步。

这是正确的版本:

 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 

任何人处理这个问题,这里是我的工作的例子:

之前:

 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\] ' 

注意颜色周围的所有'\\[\\]'