有一些命令在执行某些操作时会在控制台中打印一些状态行(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,可以在一行中显示持续更新的进度。
我已经在我的脚本中玩过这样一行状态行,发现不需要换行符 \ni 需要放置回车符 \r 这完全有意义。
然后我尝试使用命令(ffmpeg 或 fsarchiver)执行相同的操作,将输出传输到tr "\n" "\r"
.但我发现这并没有改变什么。
有没有办法从这些命令中获取一行状态行?
问候
答案1
听起来你基本上回答了你自己的问题。当您将输出通过管道传输到 时tr
,您是否同时通过管道传输了 BOTH stdout
AND stderr
?
答案2
这是一个缓冲问题:
while true; do date; sleep 1; done | stdbuf --output=0 tr '\n' '\r'