我正在尝试将 stderr 从 mbuffer 命令重定向到文件。它不起作用; stderr 输出仍然出现在屏幕上,并且errors.txt 为空。我的命令如下:
$ raspivid -w 1280 -h 720 -o - | mbuffer -m 60M -f -o /tmp/temp_video.h264 2> errors.txt &
[2] 5278
in @ 1006 KiB/s, out @ 1006 KiB/s, 9292 KiB total, buffer 0% full^C
in @ 0.0 KiB/s, out @ 0.0 KiB/s, 9.9 MiB total, buffer 17% full^C
仅供参考,我尝试重定向的 stderr 输出是“in @ 1006 KB/s....”
我做错了什么?谢谢!
答案1
你没有做错什么mbuffer
/dev/tty
如果无法读取标准错误,则重新打开,击败你的重定向。
您可以使用该-q
选项来禁用状态输出。根据文档,您可以使用以下命令-l
将状态记录到文件中
mbuffer -m 60M -f -o /tmp/temp_video.h264 -l errors.txt &
但状态日志有错误:它总是进入标准错误,不是日志。
以下是解决此问题的方法。
下载包源码
apt-get source mbuffer
添加补丁(这需要包
quilt
)cd mbuffer-20161115 quilt new 13-status-log.patch quilt add mbuffer.c
编辑
mbuffer.c
,并将第 461 行(在 Debian 8 中)或 472(在 Debian 9 中)更改为nw = write(Log,buf,strlen(buf));
存储补丁
quilt refresh
重建包(这需要
dpkg-dev
和devscripts
包)dch -n "Fix the status log to honour the -l option." dch -r ignored dpkg-buildpackage -us -uc
(如果
dpkg-buildpackage
抱怨缺少依赖项,请安装它们并重试)安装更新的包
sudo dpkg -i ../mbuffer_*-?.1_*.deb
答案2
我是 mbuffer 的作者,只是想指出状态日志没有错误。目的始终是避免将状态消息记录到日志中,因为它会破坏日志并使其不可读,除非用户明确要求。
这是通过使用“-v 4”将详细程度提高到级别 4 来完成的。
由于默认行为会导致混乱,并且还有选项 -Q 可以抑制日志中的状态消息,因此我正在考虑在未来版本中以详细级别 3 的方式在日志中包含状态消息。
问候,
托马斯