我的 .bash_profile 中有以下内容,以便在我的 bash 提示符中提供 git 分支信息:
# Configure colors, if available.
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
c_reset='\[\e[0m\]'
c_user='\[\033[1;33m\]'
c_path='\[\e[0;33m\]'
c_git_clean='\[\e[0;36m\]'
c_git_dirty='\[\e[0;35m\]'
else
c_reset=
c_user=
c_path=
c_git_clean=
c_git_dirty=
fi
# Function to assemble the Git part of our prompt.
git_prompt ()
{
if ! git rev-parse --git-dir > /dev/null 2>&1; then
return 0
fi
git_branch=$(git branch 2>/dev/null| sed -n '/^\*/s/^\* //p')
if git diff --quiet 2>/dev/null >&2; then
git_color="$c_git_clean"
else
git_color="$c_git_dirty"
fi
echo " [$git_color$git_branch${c_reset}]"
}
# Thy holy prompt.
PROMPT_COMMAND='PS1="${c_user}\u${c_reset}@${c_user}\h${c_reset}:${c_path}\w${c_reset}$(git_prompt)\$ "'
除了颜色之外,一切都运行良好。如果我删除颜色定义周围的 if 语句(并删除 else 部分),那么我就能得到颜色。
我是 Bash 的新手,我不太清楚 if 语句的作用以及为什么它没有被评估为 true。
我很高兴不用 if 语句,但我认为它存在是有原因的,除非我知道为什么,否则我不想给自己带来未知的麻烦。
我正在运行 FreeBSD 9.0 和 Bash 4.1.9(0)-release
答案1
根据手册页,tput
如果终端具有该属性则返回 1。
因此,我认为支票被颠倒了。