Talvez com tput, verifique a contagem de cores disponíveis,
ncolors=$(tput colors)
if [[ $ncolors -ge 8 ]];then
# colors available
fi
Eu quero fazer algo assim na minha caixa de linux:
if [[ colors exist ]];then
echo "some text in colors"
fi
minha dúvida é:
Estou usando o sed para colocar cores no arquivo de log para algum texto, mas se a caixa do linux não tiver as cores ativadas, ele modificará o arquivo de log de uma maneira desnecessária, como colocar alguns caracteres desnecessários como [033m etc
As cores tty são uma característica do terminal no qual o texto é mostrado. Quase todos os terminais hoje lidam com a sequência de escape ANSI, de modo que você pode deixar de colorir o texto quando gerado, mas deve realmente fazê-lo quando estiver escrito (talvez sob o controle do usuário no final da escrita). Por exemplo. configurar cores personalizadas para o seu texto para o seu pager).
Um método possível de detectar se você está executando diretamente de um emulador de terminal ou se a saída está sendo gravada em um arquivo de log, é usar readlink
:
if [[ $(readlink -f /dev/stdout) =~ '^/dev/pts/' ]]; then
# colors available
fi
Isso normalmente deve funcionar no moderno linux com o udev e o procfs. Não tenho certeza se existe algo mais portátil. Isso usa o operador especial de expressão regular bash =~
, então ele só funcionará com o bash.
Uma alternativa é, como alguém já explicou, usar tty >/dev/null
; no seu caso, você pode estar interessado apenas na saída padrão e não na entrada padrão, então você vai querer fazer com que sua saída padrão seja a entrada padrão de tty
:
if tty <&1 >/dev/null; then
# colors available
fi
Isso desativaria as cores quando você executar ./myscript.sh >>log_file
, mas ativá-las quando você executar ./myscript.sh
.
Eu recomendaria usar [[ $(tput colors) -ge 8 ]]
, para que, quando a variável de ambiente TERM
estiver definida como dumb
, as cores não sejam exibidas.
Se você escrever um arquivo de log com cores, você ainda poderá lê-lo; você terá que usar algo como less -r
ou multitail -cT ansi
de um emulador de terminal com suporte a cores.
Tags colors linux shell-script