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 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 o terminal interpreta as sequências de escape?
A ideia é simular um terminal "sem tela", não é?
Meu TERMO é (Ubuntu 16.04):
$ echo $TERM
xterm
O que devo fazer para evitar essas tput
sequências de escape quando meu script é redirecionado para um arquivo?
Solução alternativa: adicione uma opção ao meu script para desabilitar a colorização manualmente, como em ls
ou grep
como --color=none
.
resumindo: tput não faz isso.
mais: seu script pode fazer isso
Por exemplo, verifique se a saída padrão é um terminal: