我基本上是在尝试创建一个具有此输出的PS1:
$ ~/Projects/Blah (master):
但是,如果我所在的文件夹不是Git存储库,我希望它看起来像这样:
$ ~/Projects/Blah:
这是我目前的PS1:
export PS1="$ \w \$(__git_ps1): "
当我在Git仓库中时它给了我想要的输出,但当我在一个不在Git仓库中的文件夹时,输出看起来像这样:
$ ~/Projects/Blah :
如果它不是Git回购,那我真的不想那个空间。
我可以通过某种方式在我的PS1中指定这个吗?
答案 0 :(得分:1)
我最终使用了这个.git-prompt.sh
文件。让这个工作的步骤:
.git-prompt.sh
)中创建一个名为~/.git-prompt.sh
的文件,并将上面链接中的代码复制到其中。.bash_profile
或.bashrc
文件中,添加以下行:source ~/.git-prompt.sh
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/#\* /}) }"
是条件变量赋值。
如果设置了git_ps1
,那么它将等于(${git_ps1/#\* /})
,否则它将保持为空。
${git_ps1/#\* /}
从*
$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