如何在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分支之前和之后会出现一个尴尬的额外空间,因为它是空的。

是否有一种简单的方法使这个空间只出现,而不必创建一个单独的函数,将包含/不包含相应的空间?

与其将空格作为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出错,则没有行,因此这里也没有空格。

PROMPT_COMMAND中构建PS1的值比在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的值。

最新更新