2012-09-28 40 views
0

混帐回购协议的脏状态,如果我用的git回购运行此命令行1.4.3在命令行中,

git status 2> /dev/null | grep -iw 'modified' 

输出我得到

# modified: .rvmrc 

,所以我的假设是,如果我插入这在进入if语句我会得到真正的将要执行的代码

行了,但是当我创建函数作为.bash_profile中的一部分,这里是我的代码有:

## Prompt ## 
path="$white\w$reset" 
folder_name="$white\W$reset" 
git_branch="\$(git branch 2>/dev/null | grep -e '\* ' | sed 's/^..\(.*\)/$red(\1)$reset/')" 
rvm="$green(\$(~/.rvm/bin/rvm-prompt i v p))$reset" 

# Checks if working tree is dirty 
function _git_st { 
    if [[ $(git status 2> /dev/null | grep -iw 'modified') ]]; then 
    echo "[x]" 
    fi 
} 
git_st="$yellow`_git_st`$reset" 

PS1="$rvm $folder_name $git_branch $git_st \$ " 

X没有回应....我有点失落,不知道我做错了什么。

这是出把我得到:

(ruby-1.9.2-p290) folder-git (master) $ git status 
# On branch master 
# Changes not staged for commit: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
# modified: .rvmrc 
# 
no changes added to commit (use "git add" and/or "git commit -a") 
(ruby-1.9.2-p290) folder-git (master) $ 
+1

另外,你的'_git_st'函数比它需要的复杂一点。 '如果git status 2>/dev/null | grep -qiw'修改';那么'应该工作相同,而不需要捕获输出并检查它是否为空。 – chepner

+0

谢谢@chepner明天我会试试这个。 – GnrlBzik

回答

1

这样做的原因是因为你使用的是可变git_st设置PS1这将在设定PS1的时间进行评估。您可以尝试的是调用函数_git_st而不是使用git_st而不是使用git_st,即尝试以下行:
PS1="$rvm $folder_name $git_branch \$(_git_st) \$ "
另外,您可能有兴趣知道git的新版本提供的功能以及提供此类实用程序的bash完成。如果可用,你可以看看__git_ps1函数。
希望这有助于!
P.S .: Here是SO帖子,它可能会提供一些使用__git_ps1的指针。 This是Google的快速搜索结果。

+0

谢谢@ another.anon.coward指出我的缺陷,将尝试一点。 – GnrlBzik

+0

那就是它的工作。非常感谢。我会稍微检查一下链接。 – GnrlBzik