É um problema de buffer:
while true; do date; sleep 1; done | stdbuf --output=0 tr '\n' '\r'
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
É um problema de buffer:
while true; do date; sleep 1; done | stdbuf --output=0 tr '\n' '\r'
Parece que basicamente você respondeu sua própria pergunta. Quando você canaliza a saída para tr
, você canalizou BOTH stdout
AND stderr
?
Tags bash ffmpeg pipe fsarchiver