仅当没有任何内容写入 stdout 时才打印 stderr,否则仅打印 stdout 并丢弃 stderr

仅当没有任何内容写入 stdout 时才打印 stderr,否则仅打印 stdout 并丢弃 stderr

有一个命令总是将内容打印到 stderr。除非不向标准输出写入任何内容,否则此类信息永远没有用处。

那么,是否有一种简单的 shell 方式、工具或命令来帮助过滤来自命令的 stdout 和 stderr 并将它们通过管道传输,以便仅当前 stdout 输出为空时才将前 stderr 输出打印到 stderr,否则(当 stdout 不为空时)它只打印标准输出?

答案1

您可以将它们重定向到临时文件并(在脚本中)检查是否有任何内容写入标准输出。

就像是

#!/bin/sh
mytemp=$(mktemp -d)
trap "rm -rf $mytemp" EXIT INT QUIT HUP
"$@" 2>$mytemp/error | tee $mytemp/output
[ -s $mytemp/output ] || cat $mytemp/error

相关内容