Pipe para obter uma saída de linha de comando

1

Existem alguns comandos que imprimem algumas linhas de status no console quando estão fazendo algo (ffmpeg ou fsarchiver).

-[00][  0%][DIR     ] /boot/grub/fonts
-[00][  0%][REGFILE ] /boot/grub/fonts/unicode.pf2
-[00][  0%][REGFILEM] /boot/grub/grubenv
-[00][  0%][REGFILEM] /boot/grub/grub.cfg
-[00][  0%][REGFILE ] /boot/initrd.img-4.13.0-16-generic

Agora, quero criar um script que faça uso desses comandos, mas a saída eliminará as mensagens de script rapidamente. Eu sei que existem outros comandos como o novo apt ou wget que mostram o progresso em uma linha que continuamente atualiza.

Eu já joguei um pouco com essas linhas de status de uma linha no meu script descobrindo que, em vez de novas linhas \ n, preciso colocar retornos de carro \ r que façam todo o sentido.

Então eu tentei fazer o mesmo com os comandos (ffmpeg ou fsarchiver) canalizando a saída para tr "\n" "\r" . Mas eu descobri que isso não muda alguma coisa.

Existe alguma maneira de obter uma linha de status de uma linha de tais comandos?

Atenciosamente

    
por laubed 18.01.2018 / 21:51

2 respostas

1

É um problema de buffer:

while true; do date; sleep 1; done | stdbuf --output=0 tr '\n' '\r'
    
por 18.01.2018 / 23:17
0

Parece que basicamente você respondeu sua própria pergunta. Quando você canaliza a saída para tr , você canalizou BOTH stdout AND stderr ?

    
por 18.01.2018 / 21:59