파이프를 통해 명령에서 출력 라인 가져오기

파이프를 통해 명령에서 출력 라인 가져오기

특정 작업(ffmpeg 또는 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

이제 이러한 명령을 사용하는 스크립트를 작성하고 싶지만 출력에서는 스크립트 메시지가 매우 빠르게 지워집니다. 지속적으로 업데이트되는 진행 상황을 한 줄에 표시할 수 있는 new apt 또는 wget과 같은 다른 명령이 있다는 것을 알고 있습니다.

나는 내 스크립트에서 이와 같은 상태 표시줄을 가지고 놀았고 개행 문자가 필요하지 않으며 캐리지 리턴 문자를 배치해야 한다는 것을 발견했습니다.\r 이는 완벽하게 이해됩니다.

그런 다음 명령(ffmpeg 또는 fsarchiver)을 사용하여 동일한 작업을 수행하여 출력을 tr "\n" "\r".

이 명령에서 상태 표시줄을 얻을 수 있는 방법이 있습니까?

인사

답변1

기본적으로 자신의 질문에 답한 것 같습니다. 출력을 에 파이프할 때 BOTH AND ? tr를 모두 파이프합니까 ?stdoutstderr

답변2

이는 버퍼링 문제입니다.

while true; do date; sleep 1; done | stdbuf --output=0 tr '\n' '\r'

관련 정보