管道输出命令,但仅在输出非空时

时间:2014-11-22 05:10:10

标签: unix pipe stdout

在Unix下是否有办法可以运行命令并将其输出传递给另一个命令,但前提是输出非空?像

这样的东西
command --some-arg | something_magical | mail -s "Don't send this e-mail if it would be empty" foo@bar.com

我可以为something_magical添加一些简单的内容吗?

2 个答案:

答案 0 :(得分:3)

我认为你可以在link中找到答案。

无论如何,你可以把这个功能放在神奇的部分:

pipe_if_not_empty () {
  head=$(dd bs=1 count=1 2>/dev/null; echo a)
  head=${head%a}
  if [ "x$head" != x"" ]; then
    { printf %s "$head"; cat; } | "$@"
  fi
}

答案 1 :(得分:0)

您可以使用

测试文件为零或非零
if [ -s file ]

使用

查看
man test