De acordo com a manpage, tput
retorna 1 se o terminal tiver o atributo.
Então, acho que o cheque está invertido.
Eu tenho o seguinte no meu .bash_profile, para fornecer informações do branch git no meu prompt bash:
# Configure colors, if available.
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
c_reset='\[\e[0m\]'
c_user='\[3[1;33m\]'
c_path='\[\e[0;33m\]'
c_git_clean='\[\e[0;36m\]'
c_git_dirty='\[\e[0;35m\]'
else
c_reset=
c_user=
c_path=
c_git_clean=
c_git_dirty=
fi
# Function to assemble the Git part of our prompt.
git_prompt ()
{
if ! git rev-parse --git-dir > /dev/null 2>&1; then
return 0
fi
git_branch=$(git branch 2>/dev/null| sed -n '/^\*/s/^\* //p')
if git diff --quiet 2>/dev/null >&2; then
git_color="$c_git_clean"
else
git_color="$c_git_dirty"
fi
echo " [$git_color$git_branch${c_reset}]"
}
# Thy holy prompt.
PROMPT_COMMAND='PS1="${c_user}\u${c_reset}@${c_user}\h${c_reset}:${c_path}\w${c_reset}$(git_prompt)\$ "'
Tudo está funcionando bem além das cores. Se eu remover a declaração if em torno das definições de cor (e remover a seção else), então obtenho as cores.
Sou novo no bash, tenho pouco conceito do que a declaração if faz e por que ela não está sendo avaliada como verdadeira.
Fico feliz em ficar sem a declaração if, mas presumo que esteja lá por um motivo e até que eu saiba por que não quero me causar aborrecimentos desconhecidos.
Estou executando o FreeBSD 9.0 e o Bash 4.1.9 (0) -release
De acordo com a manpage, tput
retorna 1 se o terminal tiver o atributo.
Então, acho que o cheque está invertido.
Tags bash git freebsd .bash-profile