如何将当前的git分支添加到MSYS UCRT bash中的commad promt?

问题描述 投票:0回答:1

Cygwin
和几乎所有其他 *nix 中,我多年来一直在我的
.bashrc
中使用以下代码。

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

PS1='${debian_chroot:+($debian_chroot)}\[\033[00;32m\]\u@\h\[\033[00m\] \[\033[00;33m\]\w\[\033[01;31m\]$(parse_git_branch)\[\033[00m\] \n\$ '

在 git 文件夹中时会生成彩色提示。

# xxxx@LAPTOP /cygdrive/c/dev/some_git_repo (master)

但是,在 MINGW64、MSYS、UCRT64 中尝试相同的操作都失败,无法注入

parse_git_branch
结果。那些 shell 似乎只是拒绝执行该函数。很明显,MSYS 开发人员在这里做了一些奇怪的事情。 (我还注意到解释单引号和双引号还有其他奇怪的地方。)

我也尝试过:

# PS1='\[\e]00;\w\a\]\n\[\e[00;32m\]\u@\h \[\e[00;35m\]$MSYSTEM\[\e[00m\]  \[\e[00;33m\]\w\[\e[01;31m\] $(parse_git_branch)\[\e[00m\] \n\$ '

# Error: 
# -bash: command substitution: line 1: syntax error near unexpected token `)'
# -bash: command substitution: line 1: `parse_git_branch)'

问:如何在这些 shell 中恢复显示我所在的 git 分支?

bash git msys2
1个回答
0
投票

太疯狂了,尝试使用老式的反勾号 [`] 而不是

$(command)
,成功了!

解决方案是使用单引号和反引号命令替换。

PS1='\[\e]00;\w\a\]\n\[\e[00;32m\]\u@\h \[\e[00;35m\]$MSYSTEM\[\e[00m\]  \[\e[00;33m\]\w\[\e[01;31m\] `parse_git_branch`\[\e[00m\] \n\$ '
© www.soinside.com 2019 - 2024. All rights reserved.