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