标准/规范的方法来测试上述管道是否产生输出?

标准/规范的方法来测试上述管道是否产生输出?

我想到的情况具有以下结构:

% some_command | [PRODUCED OUTPUT] || echo 'no output' >&2

这里[PRODUCED OUTPUT]代表一些尚未指定的测试命令,其值应该是true(即“成功”)当some_command且仅当产生任何输出。

当然,some_command代表任意复杂的管道,同样,echo 'no output' >&2代表在some_command不产生输出的情况下执行的某些任意操作。

是否有标准测试来完成上述工作[PRODUCED OUTPUT]grep -qm1 '.'接近,但在由空行组成的输入上也报告错误。

不像检查管道是否为空,如果不是则对数据运行命令我只想丢弃输入(如果存在),我不需要保留它。

答案1

使用怎么样read

$ cat /dev/null | read pointless || echo no output
no output
$ echo something | read pointless || echo no output
$ printf "\n" | read pointless || echo no output
$ printf " \n" | read pointless || echo no output
$ false | read pointless || echo no output
no output

根据开放组定义:

退出状态

应返回以下退出值:

0

成功完成。

>0

检测到文件结尾或发生错误。

答案2

对我来说效果很好| read -n 1

$ echo 'faw' | read -n 1 || echo 'no output'
$ echo | read -n 1 || echo 'no output'
$ printf '' | read -n 1 || echo 'no output'
no output
$ false | read -n 1 || echo 'no output'
no output
$

相关内容