bash: parse_git_branch: 命令未找到

3

这应该很简单。最近我注意到,在Mac上在终端中输入“bash”时,会显示以下内容:

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

之前没有出现这种情况,有人能解释一下为什么会出现这种情况以及如何解决吗?
6个回答

13

很可能您已配置了BASH以运行parse_git_branch并将结果作为PS1的一部分打印出来。您可以通过以下方式进行检查:"echo $PS1"和"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
我也遇到了相同的问题,但对我来说它完美地解决了,谢谢。 - Abraham
不要导出PS1(就像这个答案一样),你的问题就会得到解决。 - LucasMcGraw

7
如果你的parse_git_branch被定义在~/.bash_profile中,当你打开一个非登录shell(例如通过运行bash打开)时,它将不会被加载。 登录shell和非登录shell之间的区别在这里描述:登录Shell和非登录Shell之间的区别?对于我们的目的,主要区别是登录Shell(例如你第一次打开终端时)在启动时自动引用~/.bash_profile,而非登录Shell(例如在终端内运行bash)则不会。
要解决这个错误,只需在运行bash后引用你的~/.bash_profile即可:

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

或者,您可以将该函数放置在~/.bashrc中,这样非登录shell会自动调用它(如前面链接所述)。


4

与其拥有

parse_git_branch

如果您只想调用PS1定义,可以使用以下命令:

parse_git_branch 2>/dev/null

stderr发送到/dev/null中。这将消除您不想看到的错误。


2

您是否已经导出了 $PS1 变量?您可以通过运行以下命令进行检查:

printenv

否则,您应该通过运行以下命令来导出它:
export -n PS1

在此之后,您将能够轻松运行sudo或sudo su命令,无需遇到任何问题。


1
关键是不要导出PS1。如果导出了,那么任何非登录shell也会使用PS1。由于.bash_profile自动被登录shell源代码,因此PS1变量仅影响登录shell。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接