我已按照以下方式设置了我的bashrc
文件(适用于Git Bash)
source ~/git-prompt.sh
source ~/git-completion.bash
export GIT_PS1_SHOWDIRTYSTATE=true
PS1='\[\e[0;37m\]\342\224\214\342\224\200[\[\e[0m\]\[\e[1;32m\]\u\[\e[0;37m\]:\[\e[1;34m\]\h\[\e[0;37m\]]\342\224\200[\[\e[33m\]\W\[\e[0;37m\]]\342\224\200[\[\e[1;33m\]\@\[\e[0m\]]$(__git_ps1)\n\[\e[0;37m\]\342\224\224\342\224\200\342\224\200\[\e[1;36m\]\$\[\e[0m\] '
忽略八进制字符,它可以简化为:
PS1='\[\e[0;37m\]-[\[\e[0m\]\[\e[1;32m\]\u\[\e[0;37m\]:\[\e[1;34m\]\h\[\e[0;37m\]]-[\[\e[33m\]\W\[\e[0;37m\]]-[\[\e[1;33m\]\@\[\e[0m\]]$(__git_ps1)\n\[\e[0;37m\]-\[\e[1;36m\]\$\[\e[0m\] '
这个方法很好,但是当我尝试使用以下段落获取命令状态符号时(从ArchWiki看到的),它就不起作用了:
\$([[ \$? != 0 ]] && echo \"[\[\e[1;31m\]X\[\e[0;37m\]]-\") # again, shortened the octal codes for readability
我注意到唯一的不同是ArchWiki中使用双引号,而在我的情况下使用单引号。因此,我也在我的文件中使用双引号:
PS1="\[\e[0;37m\]\$([[ \$? != 0 ]] && echo \"[\[\e[1;31m\]X\[\e[0;37m\]]-\")-[\[\e[0m\]\[\e[1;32m\]\u\[\e[0;37m\]:\[\e[1;34m\]\h\[\e[0;37m\]]-[\[\e[33m\]\W\[\e[0;37m\]]-[\[\e[1;33m\]\@\[\e[0m\]]$(__git_ps1)\n\[\e[0;37m\]-\[\e[1;36m\]\$\[\e[0m\] "
然后包含上述代码段:
PS1="\[\e[0;37m\]-[\[\e[0m\]\[\e[1;32m\]\u\[\e[0;37m\]:\[\e[1;34m\]\h\[\e[0;37m\]]-[\[\e[33m\]\W\[\e[0;37m\]]-[\[\e[1;33m\]\@\[\e[0m\]]$(__git_ps1)\n\[\e[0;37m\]-\[\e[1;36m\]\$\[\e[0m\] "
这很好用,但是我的git自动补全不再起作用了。如果我进入一个git存储库,
$(__git_ps1)
没有返回值。如果我从git存储库内部重新启动bash,它会显示当前分支,但是当我离开目录或切换分支时又无法执行。以下陈述是否有差异?
x="yzx"
x='yzx'
PS
这是关于在Windows 7环境下的内容,如果有人想知道。
$(__git_ps1)
会被替换掉,这是由于双引号的原因。相反,您希望推迟评估,直到显示提示符,因此单引号更加合适。 - glenn jackman