отображать только корневой каталог git, если это каталог git в PS1

Я знаю, что вы можете сделать что-то подобное для PS1:

Corvid @ ~/github/gitdirectory (master) $

, но это может быть немного странно: я хочу показать только базовое имя каталога git, где бы я ни находился в этом каталоге с префиксом ничего. Если я не в каталоге git, я не хочу ничего отображать

Например, если я дома, я хочу, чтобы он отображал:

Corvid $

Если я вошел в git каталог, я хочу, чтобы он отображал:

Corvid @ git_project (master)

, и если я перемещаюсь в этом каталоге, я не хочу, чтобы он что-либо добавил к пути. Поэтому, если я нахожусь на ~/git/git_project/users/authenticate.py или где-то еще, я хочу, чтобы он отображал только Corvid @ git_project (master)

Как этого можно достичь с помощью PS1?

3
задан 21 September 2018 в 15:01

1 ответ

Мой PS1 Ян не настолько хорош, но я думаю, что это могло бы работать:

parse_git_branch () {
    git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}

parse_git_tag () {
    git describe --tags 2> /dev/null
}

function git_prompt () {
    local OUT=
    local GIT_ROOT=$(git rev-parse --show-toplevel 2>/dev/null)

    if [[ -n $GIT_ROOT ]]
    then
        OUT=" @ $(basename '$GIT_ROOT')"
        local GIT_BRANCH="$(parse_git_branch)"
        if [[ "$GIT_BRANCH" == " ((no branch))" ]]
        then
            $GIT_BRANCH="($(parse_git_tag))";
        fi
        OUT="$OUT $GIT_BRANCH"
    fi
    echo $OUT
}

PS1="\u \$(git_prompt) \$ "

Эффект:

bro3886:~/devel$ bash
bro3886  $ cd
bro3886  $ cd devel/nlp/corpora
bro3886 @ nlp (master) $ 

Адаптированный от Ответвление Мерзавца Дисплея или Имена тега в Вашей Подсказке Bash и Каталог Командной строки, Разрабатывающий .

0
ответ дан 21 September 2018 в 15:01

Другие вопросы по тегам:

Похожие вопросы: