每次查找时都会评估特定代码的 Bash PS1 字符串

每次查找时都会评估特定代码的 Bash PS1 字符串

这个问题与这个问题非常相似:彩色 PS1 琴弦

但我还是没有完全明白。

所以说我有这个功能

function getjobs {
    echo $(jobs | wc -l)
}

我的 PS1 是这样的

PS1="\u@\h: [jobs "
PS1="$PS1\$(if [[ $(getjobs) == 0 ]] ; then
               echo $(color $green);
            else
               echo $(color $red);
            fi)"

现在,只有在第一次加载 .bashrc 时才会对其进行评估,但我希望每次出现新提示时都评估这个 if 语句。

我怎样才能做到这一点?

编辑:该color函数返回这些颜色的转义序列。

答案1

我通常使用这样的东西:

method_that_echos_values(){
    if [[ ]]; then
      echo -n "something"
    else
      echo -n "something else"
    fi
}

export PS1="\$(method_that_echoes_values)"

请注意,需要将其提取到方法中

答案2

我会使用 bash 的 PROMPT_COMMAND 来实现这一点。请参阅狂欢手册页和这个答案举个例子。

答案3

因此,我进行了更多实验,尝试将不同的引号放在不同的位置,并找到了一些有效的方法,但如果有人知道更简洁、更好的解决方案,请告诉我。

PS1="\u@\h: [jobs "
PS1="$PS1\$(if [[ "'$(getjobs)'" == 0 ]] ; then
           echo $(color $green);
        else
           echo $(color $red);
        fi)"

我所要做的就是将我想要重新评估的部分放在单引号中,将其他所有内容放在双引号中。我不认为这会起作用,因为我有一个双引号字符串和一个单引号字符串,但我想这没什么问题。

相关内容