我想到的情况具有以下结构:
% 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
$