Problema de formatação

1

Eu tenho um pequeno script como abaixo, onde a saída fica destacada (em vermelho, amarelo, etc.) na tela, se houver um problema

normal=$(tput sgr0)
red=$(tput setaf 1)
yellow=$(tput setaf 3)

df -h >/dev/null 2>&1 &
xx_pid=$!
sleep 3
if [ 'ps -ef| grep $xx_pid | grep -v grep | wc -l' -gt 0 ]; then
kill $xx_pid > /dev/null 2>&1
 printf "%-70s %s\n" "${red}df -h response : "  "  ......... taking more  than 30 Seconds to complete, exiting script${normal}" | tee -a $log
 exit
else
 printf "%-70s %s\n" "df -h response : "  " ......... NORMAL (Completed in  less than 30sec)" | tee -a $log
 fi

Mas no arquivo de log eu vejo caracteres indesejáveis como abaixo ([31m e (B [m)

[31mdf -h response :                    ......... taking more than 30 Seconds to complete, exiting script(B[m

Existe alguma maneira de evitar esses caracteres indesejados sem gravar no arquivo de log.

    
por Vijay 27.06.2016 / 23:15

1 resposta

2

Não é necessário usar tee : você pode atribuir sua mensagem a uma variável e printf que usar cores, e então anexar a mensagem ao arquivo de log :

 msg=$(printf "%-70s %s" "df -h response : "  " ......... NORMAL (Completed in >
 printf "%s%s%s\n" "${red}" "$msg" "${normal}"
 printf "%s\n" "$msg" >>$log

em vez de

 printf "%-70s %s\n" "${red}df -h response : "  "  ......... taking more  than 30 Seconds to complete, exiting script${normal}" | tee -a $log

O problema com tee é que ele só pode gravar na saída padrão. Você poderia fazer algo com seu script para redirecionar a saída padrão separadamente, mas é complicado:

 ( printf "%-70s %s\n" "df -h response : "  "  ......... taking more  than 30 Seconds to complete, exiting script" | tee -a $log ) | sed -e "s/^/${red}/" -e "s/$/${normal}/"
    
por 27.06.2016 / 23:46

Tags