10

我能够在 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

系统规格:

  • 操作系统:OSX 10.8.4
  • 终端和 iTerm2
  • 屏幕版本:4.00.03 (FAU) 2006 年 10 月 23 日
4

5 回答 5

5

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

于 2014-06-18T03:43:46.703 回答
5

当您打开终端时,.bash_profile会执行并因此PS1定义。然后你执行屏幕,屏幕读取PS1包含调用的环境变量parse_git_branch并尝试解析它。但是,由于 screen 没有执行.bash_profile该功能,parse_git_branch所以没有在 screen 内部定义。

移动 to 的定义,PS1因为.bashrcscreen 和 iTerm 都执行它。

于 2016-10-04T03:46:10.207 回答
3

这要简单得多,并且避免了不必要的 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"

}
于 2014-05-08T04:09:18.577 回答
2

'您在 sed 语句的末尾缺少 a :

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

否则,它似乎对我有用bash-3.2

于 2013-07-24T15:30:11.440 回答
1

切换到 root 或开始时我在 OS X High Sierra 中遇到了同样的错误,ssh-agent /bin/bash我解决了它以/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
于 2017-10-02T12:12:09.510 回答