Cor PS1 com base na saída do comando anterior [duplicado]

3

Eu tenho meu PS1 atual da seguinte forma. A saída $? é realmente útil (segunda linha).

export PS1="\
${PSOn_Blue}${PSBWhite}\t\
${PSColor_Off} \$?\
${PSColor_Off}${PSBGreen} \u\
${PSColor_Off}${PSWhite}@\
${PSColor_Off}${hostcolor}\h\
${PSColor_Off}:\
${PSBGreen}\w\
${PSColor_Off}\$\
 "

Seria ainda melhor se o código de retorno ($?) fosse vermelho na saída diferente de zero.

Como posso conseguir isso?

    
por Karlo 12.06.2013 / 09:54

2 respostas

5

Eu uso este :

BOLD_FORMAT="${BOLD_FORMAT-$(color_enabled && tput bold)}"
ERROR_FORMAT="${ERROR_FORMAT-$(color_enabled && tput setaf 1)}"
RESET_FORMAT="${RESET_FORMAT-$(color_enabled && tput sgr0)}"

PS1='$(exit_code=$?; [ $exit_code -eq 0 ] || printf %s $BOLD_FORMAT $ERROR_FORMAT $exit_code $RESET_FORMAT " ")'

Concatene isso com o resto do seu $PS1 , mas certifique-se de que você ainda usa as aspas simples; caso contrário, não funcionará, e você deve ser de ouro. Se você quiser exibir o código de saída mesmo que seja zero, simplesmente remova o [ $exit_code -eq 0 ] || bit.

    
por 12.06.2013 / 10:07
1

Isso mostraria o nome da base do diretório de trabalho ( \W ) em verde ou vermelho:

PS1='\[\e[$([[ $? = 0 ]] && printf 32 || printf 31);1m\]\W\[\e[m\] '
    
por 12.06.2013 / 12:55