我的.bashrc
:
has_gitbranch() {
if [ -e .git ]; then
GIT_BRANCH='$(__git_ps1 "%s")'
[ "$GIT_BRANCH" != 'master' ] && export PS1="$GIT_BRANCH$PS1"
fi
}
venv_cd () {
cd "$@" && has_gitbranch
}
alias cd="venv_cd"
(我自己不写,不记得从哪里得到它)
问题是如果我输入一个git repo的目录,就会发生这种情况:
reponamepeterbe@computername:~/directory $
这很好但是如果我再次进入该目录会发生什么(例如cd .
)然后会发生这种情况:
reponamereponamepeterbe@computername:~/directory $
再次:
reponamereponamereponamepeterbe@computername:~/directory $
如何更改bash if语句,以便它不会在git分支名称前面加$PS1
?
如果是Python,我会这样做:
GIT_BRANCH = get_current_git_repo_name()
if GIT_BRANCH not in PS1: # or PS1.find(GIT_BRANCH) == -1
PS1 = GIT_BRANCH + PS1
答案 0 :(得分:1)
case "$PS1" in
"$GIT_BRANCH"*)
;;
*)
PS1="$GIT_BRANCH$PS1"
;;
esac
那就是说,你正在解决错误的问题;我会将基本的PS1
值存储在其他地方,并始终从中构建PS1
和当前的repo名称。考虑一下cd /some/other/repo
会发生什么。
答案 1 :(得分:1)
我很困惑你为什么要在飞行中修改PS1。这不是必要的。这是我的尾端:
PS1='.....[\!]$(__git_ps1 "(%s)")\$ '
无论何时显示, PS1
都会被shell评估,因此该函数会运行,并且其输出会被转储到那里。如果你想用更多的git-fu搞砸它,只需将它包装在另一个函数中。如果您想在提示中的其他位置使用一些灵活的文本,只需嵌入另一个函数。
对于记录,这是从git-completion.bash
获取的示例:
PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '
这看起来非常接近你想要实现的目标,除了用户,主机和工作目录之后的分支而不是之前。