终端提示基本bash脚本
问题描述:
目前我的终端提示包含git信息。终端提示基本bash脚本
实施例清洁目录:michaelespinosa:〜/站点/ example.com [GIT中:主]
例脏目录:michaelespinosa:〜/站点/ example.com [GIT中:主*]
我想也为git信息着色(如果它是干净的则为绿色,如果是脏的则为红色)。
我以为我可以添加一个函数(parse_git_color),并根据是否存在星号来设置它的颜色。
问题在于它对于干净和肮脏的目录都保持绿色。我相信这个问题与if语句parse_git_dirty ==“*”有关,它将parse_git_dirty的值与“*”进行比较。
function parse_git_dirty {
[[ $(git status 2> /dev/null | tail -n1) != "nothing to commit (working directory clean)" ]] && echo "*"
}
function parse_git_color {
if [ parse_git_dirty == "*" ]; then
echo '\033[0;31m\'
else
echo '\033[0;32m\'
fi
}
function parse_git_branch {
git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e "s/* \(.*\)/$(parse_git_color)[git:\1$(parse_git_dirty)]/"
}
任何帮助表示赞赏! 谢谢
答
请注意PS1中的\$(...)
。它是导入的,因为只有在每次打印提示时调用您的命令时才会调用\$()
。 $()
仅被调用一次(当PS1被初始化时)。
function parse_git_dirty
{
[[ "$(git status 2> /dev/null | tail -n1)" != "nothing to commit (working directory clean)" ]] && echo "*"
}
function parse_git_color
{
if [ "$(parse_git_dirty)" == "*" ] ; then
echo "0;31m"
else
echo "0;32m"
fi
}
function parse_git_branch
{
git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e "s/* \(.*\)/[git:\1$(parse_git_dirty)]/"
}
export PS1="\[\033[\$(parse_git_color)\]\$(parse_git_branch) \[\033[0m\]"
我更新了您的建议,但没有奏效。我以michaelespinosa结束:〜/ Sites/example.com 033 [0; 32m [git:master]。我认为这个问题与if语句有关,因为无论发生什么,它都会一直返回。 – michaelespinosa 2012-02-17 20:56:15
@michaelespinosa Sry,我没有测试我的建议。我修复了我的答案。 – sgibb 2012-02-17 21:48:50
感谢@sgibb关键是将parse_git_dirty更改为“$(parse_git_dirty)” – michaelespinosa 2012-02-17 22:34:09