2015-09-30 3 views
1

Я использую следующие для отображения текущего имени филиала в моей Баш строке (через .bash_profile):Подавляя ошибку в .bash_profile

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

Но когда я нахожусь в директории, которая делает не соответствуют git репозиторий, я получаю сообщение об ошибке (потому что ./.git/HEAD does not exist).

Как я могу подавить эту ошибку?

ответ

2

Перенаправление STDERR в/DEV/нуль:

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 
} 
2

Тест присутствует ли хранилище первое:

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

Используйте git само чтобы вернуть текущую отмеченную ветку, а не копаться в репозитории.

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

Это будет работать из любой директории в репозитории, а не только из корня.

1

Непосредственно отвечая на вопрос, но есть много существующих скриптов, чтобы получить подсказку git-aware. Вы можете использовать их вместо того, чтобы писать свои собственные. См. Например, https://github.com/git/git/blob/master/contrib/completion/git-prompt.sh или выполните поиск «git bash prompt» в вашей любимой поисковой системе.

Смежные вопросы