提示中的Git分支名称

时间:2013-07-23 13:16:33

标签: bash git gnu-screen

我能够在shell提示符中显示git分支名称。但每当我使用屏幕时,我都会

bash: parse_git_branch: command not found

并且未显示git分支。 请帮助我在屏幕会议中得到这个。

我在.bash_profile中有以下内容。

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

export PS1="[\W\$(parse_git_branch)]$ "

我没有.git-completion.bash

系统规格:

  • OS:OSX 10.8.4
  • 终端& iTerm2
  • 屏幕版本:4.00.03(FAU)2006年10月23日

5 个答案:

答案 0 :(得分:5)

我在屏幕下运行时遇到了同样的问题,并且能够通过将parse_git_branch()函数的定义从.bash_profile移到.bashrc来解决。

答案 1 :(得分:5)

当您打开终端时,会执行.bash_profile,因此会定义PS1。然后执行屏幕,屏幕读取环境变量PS1,其中包括对parse_git_branch的调用并尝试解析它。但是,由于屏幕没有执行.bash_profile,因此未在屏幕内定义函数parse_git_branch

PS1的定义移至.bashrc,因为屏幕和iTerm都会执行它。

答案 2 :(得分:2)

这更简单,避免了不必要的sed:

parse_git_branch () {

    while read -r branch; do
        [[ $branch = \** ]] && current_branch=${branch#* }
    done < <(git branch 2>/dev/null)

    [[ $current_branch ]] && printf ' [%s]' "$current_branch"

}

答案 3 :(得分:1)

您的sed语句末尾缺少'

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

Othewerise,它在bash-3.2

中似乎对我有用

答案 4 :(得分:1)

在切换到root或开始ssh-agent /bin/bash时,我在OS X High Sierra中遇到了同样的错误我已将其解析为将其放入/etc/bashrc并检查我是否为root

if [[ $UID == 0 ]]; then
        PS1="\[\e[1;31;40m\]\u@\h \W\[\e[0m\]\$ "
else
        parse_git_branch() {
                git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
        }
        PS1="\u@\h \[\033[32m\]\w\[\033[33m\]\$(parse_git_branch)\[\033[00m\] $ "
fi