抑制.bash_profile

时间:2015-09-30 19:58:44

标签: bash

我使用以下内容在我的bash提示符中显示当前分支名称(通过.bash_profile):

GetBranch()
{
  cat ./.git/HEAD | sed 's+^ref: refs/heads/++'
}

但当我在 not 对应git存储库的目录中时,我收到错误(因为./.git/HEAD does not exist)。

如何抑制此错误?

4 个答案:

答案 0 :(得分:2)

将STDERR重定向到/ dev / null:

GetBranch()
{
    cat ./.git/HEAD 2>/dev/null | sed 's+^ref: refs/heads/++'
}

这是一个quick guide on file descriptors,有助于解释2>/dev/null的工作原理。

或者,您可以使命令以现有的./.git/HEAD为条件,而不是抑制错误:

GetBranch()
{
    if [[ -e "./.git/HEAD" ]]; then
        cat ./.git/HEAD 2>/dev/null | sed 's+^ref: refs/heads/++'
    fi
}

答案 1 :(得分:2)

首先测试存储库是否存在:

GetBranch()
{
    if [ -f .git/HEAD ]
    then
        sed 's+^ref: refs/heads/++' < .git/HEAD
    else
        echo "Not a repository" >&2
    fi
}

答案 2 :(得分:1)

使用git本身返回当前已签出的分支,而不是挖掘到存储库。

GetBranch () {
    git symbolic-ref --short HEAD 2> /dev/null
}

这将在存储库中的任何目录中运行,而不仅仅是根目录。

答案 3 :(得分:1)

没有直接回答这个问题,但是有很多现有的脚本可以获得git-aware提示。您可能想要使用它们而不是自己编写。例如,请参阅https://github.com/git/git/blob/master/contrib/completion/git-prompt.sh或搜索&#34; git bash提示符&#34;在你最喜欢的搜索引擎。