首页 > 解决方案 > 在 Windows 上为 Git Bash 设置 .bashrc 时,为什么 PS1 中的函数显示函数名称而不是求值?

问题描述

以下是我当前位于主目录中的 .bashrc 文件中的内容。

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

PS1='\n'                                        # New line
PS1=$PS1'\[\033[01;32m\]\u'                     # Username
PS1=$PS1' \[\033[00m\]at \[\033[01;35m\]\h'     # at Hostname
PS1=$PS1' \[\033[00m\]in \[\033[01;36m\]\W'     # in Directory
PS1=$PS1'\[\033[01;33m\]\$(parse_git_branch)'   # Git branch
PS1=$PS1'\[\033[00m\]\n\$ '                     # New line and prompt

export PS1

这个 bash 提示应该是

user at host in ~ (main)
$ 

在我的主目录中的 git 存储库的主分支上时。相反,bash 提示符是

user at host in ~$(parse_git_branch)
$

PS1 定义中的函数只是在提示中显示为文本,而不是被评估。

有谁知道为什么会发生这种情况?

编辑:

当更改调用函数的行以使用双引号并在调用之前删除斜杠时,如下所示,

PS1=$PS1"\[\033[01;33m\]$(parse_git_branch)"

git 分支在第一次打开 bash 但不更新时正确显示。如果我将调用函数的行更改为仍然使用双引号但包含斜杠或使用不带斜杠的单引号,如下所示,

PS1=$PS1"\[\033[01;33m\]\$(parse_git_branch)"
PS1=$PS1'\[\033[01;33m\]$(parse_git_branch)'

打开 bash 时出现以下错误,

$ bash
bash: command substitution: line 1: syntax error near unexpected token `)'
bash: command substitution: line 1: `parse_git_branch)'

编辑2:

通过将调用函数的行更改为

PS1=$PS1'\[\033[01;31m\]`parse_git_branch`'

如此处所示。

标签: bashps1

解决方案


推荐阅读