如何在bash中检查管道内容(stdout)是否为空

时间:2019-02-21 14:16:17

标签: bash

一些例子:

我有一个shellscript,我想检查命令的标准输出是否为空。 所以我可以做

if [[ $( whateverbin | wc -c) == 0 ]] ; then
  echo no content
fi

但是没有直接的命令来检查吗?像这样:

if whateverbin | checkifstdinisempty ; then
  echo no content
fi

3 个答案:

答案 0 :(得分:1)

您可以使用the -z conditional expression来测试字符串是否为空:

if [[ -z $(ls) ]]; then echo "ls returned nothing"; fi

在空结果上运行时,分支将被执行:

if  [[ -z $(cat non-existing-file) ]]; then echo "there was no result"; fi

答案 1 :(得分:1)

只需尝试读取一个字符即可;如果没有输入,read将失败。

if ! whateverbin | IFS= read -n 1; then
    echo "No output"
fi

如果read失败,则整个管道都会失败,并且!会否定非零退出状态,以便整个条件成功。

答案 2 :(得分:0)

[[ `echo` ]] && echo output found || echo no output

->无输出

[[ `echo something` ]] && echo output found || echo no output

->找到输出

如果有,

if [ `echo` ] ; then echo ouput found; else echo no output; fi