Eu costumo usar algo assim:
method_that_echos_values(){
if [[ ]]; then
echo -n "something"
else
echo -n "something else"
fi
}
export PS1="\$(method_that_echoes_values)"
Note que é necessário extraí-lo para um método
Esta questão é muito semelhante a esta: Cadeia PS1 colorida
Mas ainda não entendi completamente.
Então diga que eu tenho essa função
function getjobs {
echo $(jobs | wc -l)
}
E meu PS1 é esse
PS1="\u@\h: [jobs "
PS1="$PS1\$(if [[ $(getjobs) == 0 ]] ; then
echo $(color $green);
else
echo $(color $red);
fi)"
Agora isso só é avaliado quando o .bashrc é carregado pela primeira vez, mas o que eu quero que aconteça é esta declaração se avaliada toda vez que um novo prompt aparecer.
Como posso fazer isso?
EDIT: a função color
retorna seqüências de escape para essas cores.
Eu usaria o PROMPT_COMMAND do bash para isso. Veja a página do manual bash e esta resposta para um exemplo.
Então, eu estava fazendo mais experimentos com diferentes posicionamentos de citações diferentes e descobri algo que funciona, mas se alguém souber uma solução mais limpa e melhor, avise-nos.
PS1="\u@\h: [jobs "
PS1="$PS1\$(if [[ "'$(getjobs)'" == 0 ]] ; then
echo $(color $green);
else
echo $(color $red);
fi)"
Tudo o que eu tive que fazer foi colocar a parte que eu queria reavaliado entre aspas simples com todo o resto entre aspas duplas. Eu não achei que funcionaria, já que eu tinha uma string dupla ao lado de uma única string citada, mas eu acho que é uma coisa boa.
Tags command-line bash string