有一个命令总是将内容打印到 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