PS1中的条件空间

时间:2016-05-04 08:09:17

标签: git bash prompt ps1

我基本上是在尝试创建一个具有此输出的PS1:

$ ~/Projects/Blah (master):

但是,如果我所在的文件夹不是Git存储库,我希望它看起来像这样:

$ ~/Projects/Blah:

这是我目前的PS1:

export PS1="$ \w \$(__git_ps1): "

当我在Git仓库中时它给了我想要的输出,但当我在一个不在Git仓库中的文件夹时,输出看起来像这样:

$ ~/Projects/Blah :

如果它不是Git回购,那我真的不想那个空间。

我可以通过某种方式在我的PS1中指定这个吗?

4 个答案:

答案 0 :(得分:1)

我最终使用了这个.git-prompt.sh文件。让这个工作的步骤:

  1. 在您的主目录(.git-prompt.sh)中创建一个名为~/.git-prompt.sh的文件,并将上面链接中的代码复制到其中。
  2. 在您的.bash_profile.bashrc文件中,添加以下行:source ~/.git-prompt.sh
  3. 将您的PS1更改为:PS1='\n$ \w$(__git_ps1 " (%s)"): '

答案 1 :(得分:1)

使用PROMPT_COMMAND逐个构建提示通常要简单得多,这是在每个提示显示之前执行的代码。 (顺便说一下,PS1不需要导出。)

build_prompt () {
    PS1="$ \w"
    git_info=$(__git_ps1)
    if [[ $git_info ]]; then
        PS1+=" $git_info"
    fi
    PS1+=": "
}
PROMPT_COMMAND=build_prompt

答案 2 :(得分:0)

export PS1="$ \w \$(__git_ps1): "
     

我的__git_ps1等于git branch 2>/dev/null | grep '*' | sed 's/* \(.*\)/(\1)/'

将您的__git_ps1更改为:

git branch 2>/dev/null | grep '*' | sed 's/* \(.*\)/ (\1)/'

请注意sed之前(\1)替换中的额外空白区域。

Edit1 :由@andlrc简化__git_ps1,只减少一个命令:

__git_ps1() { git branch 2>/dev/null | sed -n 's/\* \(.*\)/ (\1)/p'; }

答案 3 :(得分:0)

像这样准备git_ps1

git_ps1=$(git branch 2>/dev/null | grep '*')
git_ps1="${git_ps1:+ (${git_ps1/#\* /}) }"
##                  ^space             ^space
## Change the spaces if you like it other ways.

git_ps1将像(master)一样,两端都有空格;未设置git_ps1时的完整空字符串(对于非git目录)。现在,您可以使用$git_ps1变量将其插入任何您喜欢的位置。

说明:

git_ps1="${git_ps1:+ (${git_ps1/#\* /}) }"

条件变量赋值

  1. 如果设置了git_ps1,那么它将等于(${git_ps1/#\* /}),否则它将保持为空。

  2. ${git_ps1/#\* /}*

  3. 的开头剪切$git_ps1和空格

    <小时/> 示例用法:

    __git_ps1(){
        git_ps1=$(git branch 2>/dev/null | grep '*')
        git_ps1="${git_ps1:+ (${git_ps1/#\* /})}"
        echo "$git_ps1"
    }
    if [ "$color_prompt" = yes ]; then
        PS1='${debian_chroot:+($debian_chroot)}\[\033[00m\]\[\033[01;34m\]\w\[\033[00m\]$(__git_ps1) \[\033[1;32m\]>\[\033[00m\]\[\033[1;32m\]>\[\033[00m\]\[\033[1;32m\]>\[\033[00m\] '
    else
        PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
    fi
    

    这给我一个像这样的提示: enter image description here