bash:来自管道的空输入的默认输出

时间:2018-06-04 11:23:56

标签: bash shell pipe

我正在尝试将几个不同的命令组合在一起。某些命令可能会返回空输出。在这种情况下,我想要一些默认输出,而不是空输出。我怎样才能在bash中实现它?

1 个答案:

答案 0 :(得分:1)

只需使用带有超时的read命令,查看它是否返回某些内容,并在空的情况下返回一些默认输出。这依赖于read命令返回的退出代码,无法从输入流中读取。

.. | { read -r -t1 val || echo 'something' ; }

例如,尝试在大海捞针中搜寻

echo haystack | grep needle | { read -r -t1 val && echo "$val" || echo 'something' ;  }

使用if条件的此用例的常规样板模板将类似于下面的内容并且更详细地编写:

if read -r -t1 val < <(echo haystack | grep needle); then 
    printf '%s\n' "$val"
else 
    printf '%s\n' "something"
fi

您可以使用您正在使用的命令替换部件echo haystack | grep needle