我知道你可以为 PS1 做类似的事情:
Corvid @ ~/github/gitdirectory (master) $
但是,这可能有点奇怪:无论我在该目录中的哪个位置,我都只想显示 git 目录的基本名称,不带任何前缀。如果我不在 git 目录中,我不想显示任何内容
例如,如果我在家,我希望它显示:
Corvid $
如果我进入了 git 目录,我希望它显示:
Corvid @ git_project (master)
如果我在该目录中移动,我不希望它向路径添加任何内容。因此,如果我在~/git/git_project/users/authenticate.py
某个地方,我只希望它显示Corvid @ git_project (master)
如何通过 PS1 实现这一点?
答案1
我的PS1
-fu 不是那么好,但我认为这可能会有用:
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) $