Evitar seqüências de escape tput ao redirecionar a saída do script para um arquivo

2

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 .

    
por el-teedee 11.02.2018 / 19:54

1 resposta

4

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
    
por 11.02.2018 / 20:04