bash:parse_git_branch:找不到命令

时间:2016-03-09 01:41:07

标签: bash terminal osx-elcapitan

这应该很简单。 我最近注意到,当我在Mac上的“终端”中键入“bash”时,它会显示:

Jays-MacBook-Pro: ~ $ bash
bash: parse_git_branch: command not found

之前没有。有人可以解释为什么以及如何解决。

4 个答案:

答案 0 :(得分:6)

您可能已将BASH配置为运行parse_git_branch并将结果作为PS1(或类似)的一部分打印。您可以通过以下方式检查:" echo $ PS1"和#34; echo $ PROMPT_COMMAND"。

但是,parse_git_branch不是bash的内置函数。以下是我配置PS1的方法。您可能希望将我的git_branch_4_ps1复制为parse_git_branch

    PS1='\n'                           # begin with a newline
    PS1=$PS1'\[\e[38;5;101m\]\! \t '   # time and command history number
    PS1=$PS1'\[\e[38;5;106m\]\u@\h '   # user@host
    PS1=$PS1'\[\e[7;35m\]${MY_WARN}\[\e[0m\] ' # warning message if there is any
    PS1=$PS1'\[\e[38;5;10m\]${MY_EXTRA} '      # extra info if there is any
    PS1=$PS1'\[\e[0;36m\]$(git_branch_4_ps1) ' # git_branch_4_ps1 defined below
    PS1=$PS1'\[\e[38;5;33m\]\w'        # working directory
    PS1=$PS1'\n\[\e[32m\]\$ '          # "$"/"#" sign on a new line
    PS1=$PS1'\[\e[0m\]'                # restore to default color

    function git_branch_4_ps1 {     # get git branch of pwd
        local branch="$(git branch 2>/dev/null | grep "\*" | colrm 1 2)"
        if [ -n "$branch" ]; then
            echo "(git: $branch)"
        fi
    }

答案 1 :(得分:3)

而不是

parse_git_branch

单独调用PS1定义你可以使用

parse_git_branch 2>/dev/null

stderr发送给/dev/null。这样可以消除您不想看到的错误。

答案 2 :(得分:1)

你输出$ PS1了吗? 您可以通过运行命令检查:

interceptor

否则你应该通过run:

导出它
printenv

之后你可以毫无问题地运行sudo或sudo su

答案 3 :(得分:0)

如果您的parse_git_branch是在~/.bash_profile中定义的,则在您打开非登录外壳程序(例如通过运行bash)时不会加载它。

登录外壳程序和非登录外壳程序的区别如下:Difference between Login Shell and Non-Login Shell?就我们的目的而言,主要区别在于登录外壳程序(例如,当您第一次打开Terminal时)在启动时会自动提供~/.bash_profile ,而非登录外壳程序(例如,当您在Terminal中运行bash时)则不会。

要解决此错误,只需在运行bash之后获取~/.bash_profile即可:

user@host:~ $ bash
bash: parse_git_branch: command not found
user@host:~ $ source .bash_profile

或者,将函数放在~/.bashrc中,该函数将由非登录外壳程序自动提供(如先前的链接所述)。