我正在尝试使用git分支(如果可用)在Mac OS X上着色我的bash提示。
凭借我有限的bash知识,我将来自Google搜索和其他问题的以下代码拼凑在一起:
function parse_git_branch() {
branch=$(git rev-parse --abbrev-ref HEAD 2>/dev/null)
if [[ -z "$branch" ]]; then
return
fi
if [[ -z "$(git status -s 2>/dev/null)" ]]; then
color=$'\e[1;32m'
else
color=$'\e[1;31m'
fi
echo "\[$color\] (${branch}) "
}
PS1="\h:\W \u\$(parse_git_branch)\[\e[0m\]\$ "
在着色工作时,提示符包含parse_git_branch
的一些转义序列。
leonidas:AYI jason\[\] (master) $
此外,命令历史记录(向上)和递归搜索(ctrl + r)之类的东西会产生额外的字符。
leonidas:AYI jason\[\] (master) $h)`re': git status
tput
代替这些颜色代码来获得更广泛的支持吗?答案 0 :(得分:2)
为什么要解决所有这些麻烦。只需创建一个.bash_profile
我的是: -
export PS1="\[\033[0;30;33m\]\w\[\e[0m\]$ "
您应该设置.bashrc
以引用此
[ -r ~/.bash_profile ] && source ~/.bash_profile
答案 1 :(得分:2)
问题是扩展数据中不尊重\[ \]
。
要解决此问题,您可以在PROMPT_COMMAND
中将PS1设置为自身的扩展后版本,其内容将在每次提示之前进行评估:
PROMPT_COMMAND='PS1="\h:\W \u$(parse_git_branch)\[\e[0m\]\\\$ "'
由于\[ \]
现在是PS1的字面值的一部分,而不是通过快速扩展创建的,因此它们被正确解释。