curto: tput não faz isso.
por mais tempo: seu script pode fazer isso
Por exemplo, verifique se a saída padrão é um terminal:
if [ -t 1 ]
then
color=$( tput setaf 1 )
normal=$( tput sgr0 )
else
color=""
normal=""
fi
Eu tenho uma função de shell que colore um nome de arquivo usando tput
.
color=$( tput setaf 1 )
normal=$( tput sgr0 )
colorize() {
echo "${color}$1$(normal)"
}
Quando eu chamo a função, o terminal exibe o nome do arquivo colorido conforme o esperado.
$ myScript.sh .
/path/to/dir # (in color red)
Então, se eu redirecionar a saída para um arquivo:
$ myScript.sh > /tmp/file.log
file.log
ainda contém sequências de escape como:
^[[36m~/path/to/my/file/^[(B^[[[m
Isso poderia estar relacionado ao TERM e infocomp e como as interpretações de terminal escapam de sequências?
A ideia é simular um terminal "sem exibição", não é?
Meu TERMO é (Ubuntu 16.04):
$ echo $TERM
xterm
O que devo fazer para evitar tais sequências de escape tput
quando meu script é redirecionado para um arquivo?
Solução alternativa: adicione uma opção ao meu script para desativar a colorização manualmente, como em ls
ou grep
like --color=none
.