如何在bash中简洁地设置条件空间?

时间:2015-08-14 07:26:26

标签: bash

我只是通过.bash_profile文件进行修改,以便它可以显示我当前的git分支。它有效,但我只是想稍微改进一下格式。

以下是我目前正在做的事情:

export PS1="${COL1}\u: ${COL2}\w${COL3} \$(git branch 2>/dev/null | grep '^*' | colrm 1 2)${NCOL} > "

如果直接存在分支,则它可以正常工作。如果没有分支,2>/dev/null将消除错误,但是,在空的git分支之前和之后将存在一个尴尬的额外空间,因为它是空的。

是否有一种简单的方法可以仅显示此空间,而无需创建单独的功能,包括/不包含相应的空格?

2 个答案:

答案 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的值。