仅抑制脚本中的 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.cpp
或 test.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 "$@"
我有以下设置:
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.cpp
或 test.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 "$@"