Stderr 重定向不起作用

Stderr 重定向不起作用

我正在尝试将 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 &

但状态日志有错误:它总是进入标准错误,不是日志。

以下是解决此问题的方法。

  1. 下载包源码

    apt-get source mbuffer
    
  2. 添加补丁(这需要包quilt

    cd mbuffer-20161115
    quilt new 13-status-log.patch
    quilt add mbuffer.c
    
  3. 编辑mbuffer.c,并将第 461 行(在 Debian 8 中)或 472(在 Debian 9 中)更改为

    nw = write(Log,buf,strlen(buf));
    
  4. 存储补丁

    quilt refresh
    
  5. 重建包(这需要dpkg-devdevscripts包)

    dch -n "Fix the status log to honour the -l option."
    dch -r ignored
    dpkg-buildpackage -us -uc
    

    (如果dpkg-buildpackage抱怨缺少依赖项,请安装它们并重试)

  6. 安装更新的包

    sudo dpkg -i ../mbuffer_*-?.1_*.deb
    

答案2

我是 mbuffer 的作者,只是想指出状态日志没有错误。目的始终是避免将状态消息记录到日志中,因为它会破坏日志并使其不可读,除非用户明确要求。

这是通过使用“-v 4”将详细程度提高到级别 4 来完成的。

由于默认行为会导致混乱,并且还有选项 -Q 可以抑制日志中的状态消息,因此我正在考虑在未来版本中以详细级别 3 的方式在日志中包含状态消息。

问候,

托马斯

相关内容