Этот вопрос очень похож на этот: Цветная строка 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 загружается впервые, но я хочу, чтобы это происходило, если оператор вычисляется каждый раз, когда появляется новое приглашение.

Как я могу это сделать?

РЕДАКТИРОВАТЬ: функция color возвращает escape-последовательности для этих цветов.

3 ответа3

1

Я бы использовал PROMPT_COMMAND от bash для этого. Смотрите страницу руководства bash и этот ответ для примера.

0

Я обычно использую что-то вроде этого:

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

export PS1="\$(method_that_echoes_values)"

Обратите внимание, что для извлечения его в метод требуется

0

Поэтому я больше экспериментировал с различным размещением различных цитат и нашел что-то, что работает, но если кто-то знает более чистое, лучшее решение, пожалуйста, дайте мне знать.

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

Все, что мне нужно было сделать, это поместить нужную мне часть в одинарные кавычки, а все остальное - в двойные. Я не думал, что это сработает, так как у меня была строка в двойных кавычках рядом со строкой в одинарных кавычках, но я думаю, это нормально.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .