Tput bugando no Multitail

Opa, beleza pessoal?

Em resumo… estou querendo rodar dois scripts bash numa mesma tela de terminal (utilizando o multitail) que basicamente seria o programa principal e uma barra de loading. No script que faz a barra de loading eu utilizei o tput .

O multitail vai ficar monitorando os dois scripts ao mesmo tempo certo? o script principal, funcionou perfeitamente, porém, o que tem a barra de loading (que usa o tput dentro dele) fica bugado.

OBS: Isso acontece somente com o multitail, rodando fora do multitail, não buga.

A mensagem de erro que ele retorna:

tput: unknown terminal "dum"

tput_multitail_bug


Esse era o esperado (aqui rodei os comandos separadamentas em 2 terminais separados (split no terminator)):

tput_multitail_correto

Tente adicionar no script de “loading”, a seguinte linha, antes do utilitário tput.

TERM=xterm

Infelizmente não aconteceu nada, simplesmente ficou tudo em branco como se não tivesse nada.

Isso acontece porque deve estar usando o caractere \r “carriage return” , para criar esta animação, onde o multitail, não consegue capturar como uma nova linha, já que não foi feito pra tal, o mesmo foi desenhado para visualizarmos múltiplos arquivos de logs, assim como o utilitário tail, portanto se quiser prosseguir terá que enviar a saída desta animação para um arquivo e então ler com o multitail.

Agora saiba que se está, a usar este utilitário, para criar uma animação e/ou barra de progresso, enquanto uma tarefa está sendo executada, definitivamente não é a melhor opção, uma das opções seria algo como loop while ou um utilitário como o pv.

Certamente o erro era esse mesmo, mas, mas ainda porque eu estava usando a opção -n do echo que printava na tela a barra de carregamento, que no caso, ela explicitamente suprime a new line.

Bom, eu estava anteriormente já tentando se utilizar dessa estratégia que comentou… jogando a saida do comando para um arquivo e eventualmente fazendo com que o multitail ficasse monitorando o mesmo… e praticamente foi isso que eu fiz mesmo… porém, o programa principal, que ia rodar junto com a barra de carregamento eu não precisei fazer isso, pois o multitail tem uma opção nativa dele mesmo que você pode justamente ficar escutando a saida de algum comando que você passar… então o que por fim eu fiz foi passar duas coisas para o multitail…

  1. Passar o programa principal direto para o multitail para ele ficar escutando a saida do mesmo
  2. Passar o arquivo que ficaria sendo alimentado com a barra de progresso pelo próprio script da barra de progresso
  3. Iniciar por fora a barra de progresso (quando eu passo o comando principal para o multitail ele automáticamente já passa a ser excutado)

Ficando então assim o comando do multitail:

multitail -D -l main-program -i ${loading_bar_file}

E ficou assim o echo que printa a barra para o arquivo dentro do loop:

echo -e "\n\nProgress: [${loading_bar_size}] ${percentual}%" >> ${loading_bar_file}

Enfim… muito obrigado pela ajuda!

1 curtida

Este tópico foi fechado automaticamente 3 dias depois da última resposta. Novas respostas não são mais permitidas.