我只是通过.bash_profile
文件进行修改,以便它可以显示我当前的git
分支。它有效,但我只是想稍微改进一下格式。
以下是我目前正在做的事情:
export PS1="${COL1}\u: ${COL2}\w${COL3} \$(git branch 2>/dev/null | grep '^*' | colrm 1 2)${NCOL} > "
如果直接存在分支,则它可以正常工作。如果没有分支,2>/dev/null
将消除错误,但是,在空的git分支之前和之后将存在一个尴尬的额外空间,因为它是空的。
是否有一种简单的方法可以仅显示此空间,而无需创建单独的功能,包括/不包含相应的空格?
答案 0 :(得分:1)
为什么不让它们成为PS1
替换的一部分,而不是让有问题的空格成为git
的无条件部分?
export PS1="${COL1}\u: ${COL2}\w${COL3}\$(git branch 2>/dev/null | grep '^*' | colrm 1 1 | sed 's/$/ /')${NCOL}> "
colrm 1 1
代替colrm 1 2
保留分支的前导空格,例如* master
。
sed 's/$/ /'
用空格(和行尾)替换行尾。如果git branch
出错,则没有行,因此此处也没有空格。
答案 1 :(得分:0)
从PS1
中构建PROMPT_COMMAND
的价值比在PS1
本身中嵌入小脚本更容易。
prompt_cmd () {
PS1="${COL1}\u: ${COL2}\w${COL3}"
git_info=$(git branch 2>/dev/null | grep '^*' | colrm 1 2)
if [[ $git_info ]]; then
PS1+="$git_info "
fi
PS1+="${NCOL} > "
}
PROMPT_COMMAND=prompt_cmd
在显示提示之前,执行存储在PROMPT_COMMAND
中的代码(在这种情况下,单个函数调用)。 prompt_cmd
每次都从头开始构建PS1
的值。