git - 将 git 的分支名称附加到命令提示符

标签 git bash shell

我想使用 Git-completion.bash 的一项功能,但我无法自定义我想要的外观。这是我的 .bash_profile 的相关部分:

source ~/.git-completion.bash

function prompt
{
local WHITE="\[\033[1;37m\]"
local GREEN="\[\033[0;32m\]"
local CYAN="\[\033[0;36m\]"
local GRAY="\[\033[0;37m\]"
local BLUE="\[\033[0;34m\]"
export PS1="
${GREEN}\u${CYAN}@${BLUE}\h ${CYAN}\w $(__git_ps1 '(%s)') ${GRAY}
$ "
}
prompt

并且它不显示分支名称。

但是,如果我将上面的导出 PS1 替换为下面的导出 PS1,它会按预期工作:

export PS1='\w$(__git_ps1 "(%s)") > '

我想这是一些撇号/引号问题。

我应该如何更正第一个版本才能使其正常工作?

最佳答案

正确引用的技巧是将所有内容都用双引号引起来,除了 $(__git_ps1 "(%s)") 是单引号。

source ~/.git-completion.bash
function prompt
{
local WHITE="\[\033[1;37m\]"
local GREEN="\[\033[0;32m\]"
local CYAN="\[\033[0;36m\]"
local GRAY="\[\033[0;37m\]"
local BLUE="\[\033[0;34m\]"
export PS1="
${GREEN}\u${CYAN}@${BLUE}\h ${CYAN}\w"' $(__git_ps1 "(%s)") '"${GRAY}"
}
prompt

另一种解决方案是将问题代码中的 $( 替换为 \$(

背景信息:发生了两次替换:第一次是在 export PS1="..." 时,后来是在显示提示时。你想在每次显示提示时执行 __git_ps1,所以你必须确保第一个替换保持 $(...) 完整。因此,您可以编写 '$(...)'"\$(...)"。这是我提出的解决方案背后的两个基本思想。

关于git - 将 git 的分支名称附加到命令提示符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/816790/

相关文章:

bash - 这个 sed 语法是什么意思? "s/MY_BASE_DIR=\(.*\)/MY_BASE_DIR=${MY_BASE_DIR-\1}/"

svn - Unix命令剥离一行的一部分

shell - 如何打开 shell 然后在其中执行命令

c++ - Git、SourceTree、VisualStudio 和损坏的 .cpp 文件

Github 显示错误的提交时间

java - git:用于从存储库获取 git 注释的 java git api

linux - 为什么 "expr $n - 1"有效,而 "expr $n -1"无效?

git - 使用 git log 时如何排除目录?

linux - 如何使用 shell 比较两个文件中的列值?

shell - 如何将shell中的strace解析为纯文本?