仅抑制脚本中的 bash 作业控制消息(中止、管道损坏)

Suppress just bash job control messages in scripts (Aborted, Broken pipe)

我有以下设置:

aborter.cpp

#include <cassert>
int main(int argc, char** argv) { assert(argc >= 2); return 0; }
// compiled to 'aborter'

test.sh

#!/usr/bin/bash

function runpipe() {
    yes | aborter "$@"
    test $? -ne 0 || echo OK
}
runpipe "$@"

运行 test.sh 123 仅打印 OK。 运行 仅 test.sh 输出以下内容:

aborter: aborter.cpp:2: int main(int, char**): Assertion `argc >= 2' failed.
./test.sh: line 3:  2521 Broken pipe             yes
      2522 Aborted                 | aborter "$@"

如何在第二种情况下抑制 bash 输出的 'Broken pipe' 和 'Aborted' 作业控制行? 我希望输出只是 C++ 断言转储(第一行)。

这应该不需要编辑 aborter.cpptest.sh 界面。

How do I suppress the 'Broken pipe' and 'Aborted' job control lines output by bash in the second case?

将 bash stderr 重定向到 null,除了你的进程。

exec 3<&2 2>/dev/null
function runpipe() {
    yes | aborter "$@" 2>&3
    test $? -ne 0 || echo OK
}
runpipe "$@"