Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在bash中检查管道内容(stdout)是否为空_Bash - Fatal编程技术网

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

如何在bash中检查管道内容(stdout)是否为空,bash,Bash,例如: 我有一个shell脚本,我想检查命令的stdout是否为空。 所以我能做到 if [[ $( whateverbin | wc -c) == 0 ]] ; then echo no content fi 但是没有直接的命令来检查这个吗?比如: if whateverbin | checkifstdinisempty ; then echo no content fi ->无输出 [[ `echo something` ]] && echo output fou

例如:

我有一个shell脚本,我想检查命令的stdout是否为空。 所以我能做到

if [[ $( whateverbin | wc -c) == 0 ]] ; then
  echo no content
fi
但是没有直接的命令来检查这个吗?比如:

if whateverbin | checkifstdinisempty ; then
  echo no content
fi
->无输出

[[ `echo something` ]] && echo output found || echo no output
->找到的输出

如果:

if [ `echo` ] ; then echo ouput found; else echo no output; fi
->无输出

[[ `echo something` ]] && echo output found || echo no output
->找到的输出

如果:

if [ `echo` ] ; then echo ouput found; else echo no output; fi
您可以使用测试字符串是否为空:

if [[ -z $(ls) ]]; then echo "ls returned nothing"; fi
在空结果上运行时,将执行分支:

if  [[ -z $(cat non-existing-file) ]]; then echo "there was no result"; fi
您可以使用测试字符串是否为空:

if [[ -z $(ls) ]]; then echo "ls returned nothing"; fi
在空结果上运行时,将执行分支:

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

试着只读一个字;如果没有输入,读取将失败

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

如果读取失败,则整个管道将失败,并且!取消非零退出状态,使整个条件成功。

只需读取一个字符;如果没有输入,读取将失败

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

如果读取失败,则整个管道将失败,并且!否定非零退出状态,使整个条件成功。

可能是-z不起作用,因为命令的输出仅由ASCII NUL字符和换行符组成。请尝试[[-z$printf'\n\0\n']]&&echo EMPTY。问题中的代码正确地将printf输出标识为非空。如果命令的输出仅由ASCII NUL字符和换行符组成,则-z可能不起作用。请尝试[[-z$printf'\n\0\n']]&&echo EMPTY。问题中的代码正确地将printf输出标识为非空。纯echo确实会生成一个换行符输出,问题中的代码可以识别这一点。这种方法无法处理仅由ASCII NUL字符和换行符组成的输出。纯echo确实会生成一个换行符输出,问题中的代码可以识别这一点。这种方法无法处理仅由ASCII NUL字符和换行符组成的输出。