我想使用tee
管道将内容分别从stdout
文件stderr
传输到文件中(实际上将其附加到文件中> >(tee -a $filename)
)。但是,我不想看到附加到文件中的内容,而是希望有一些真实的基于管道内容的进度指示器。到目前为止,各个通道的输出中的行数,或者字符数或类似的数量。
注:为什么我要强调真实的多于?因为我知道如何通过后台的子 shell 获取旋转警棍,然后通过存储其 PID 来杀死它。这是一个很令人感动的东西,但并没有真正提供任何关于正在发生的事情的迹象——也就是说,它是万金油。
顺便说一句:一开始输出文件可能不存在,因此任何具有子 shell 的解决方案都必须考虑这一点。
答案1
my-program > >(pv -trabcN stdout > stdout) 2> >(pv -trabcN stderr > stderr)
会给你一个进步,如:
stderr: 123MiB 0:00:03 [42.6MiB/s] [41.1MiB/s]
stdout: 138MiB 0:00:03 [54.2MiB/s] [46.2MiB/s]
(当前(-r
)和平均(-a
)速度。是相对较新的,如果您的版本没有它,-a
可以忽略它)。pv
答案2
命令 tail 的 -f(永远)选项可能很有用。
为文件的每一行发出一个点:
tail -f bk2ud.log | awk '{printf(".");}'
然而,根据您的需要,您可能会追求更复杂的东西。