bash - 在 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`'
如此处所示。
解决方案
推荐阅读
- ios - 如何将实体移回其初始位置
- firebase - 如何从firebase实时数据库中提取密钥并传递到编辑屏幕?
- swiftui - SwiftUI 中的 UIInterpolatingMotionEffect
- neo4j - 如何在使用 neo4j-admin 导入加载 neo4j 时拆分列中的数据?
- android - 如何在 Android 项目中使用 Arrow Meta
- javascript - JavaScript 加载属性
- javascript - 如何调试 EJS
- json - 在材料表详细信息面板下显示子表
- java - 可迭代接口的目的
- python-3.x - 如何从 dnspython 的解析器中按名称删除搜索域?