bash - 在不消耗数据的情况下测试输入流是否为空
问题描述
考虑下一个片段。
generate_build_specs(){
echo ubuntu gcc9 debug
echo macos clang debug
echo macos gcc10 release
echo macos clang release
}
generate_build_specs | awk -v IGNORECASE=1 '/macos/ && /release/' |
if input_data_available ;then
echo "FIXME. Cannot build 'macos release' until it is fixed. Buildspec dropped: $(cat)"
fi
我的想法是仅当流中的数据可用时才使用输入流的内容回显消息。像peek(char)
流中的东西,而不是从那里拿走它。
当然,我知道一种解决方法。IE
var="$(cat)"; if test -n "$var"; echo "blah:: $var" ; fi
解决方案
不完全符合您的要求,但对于您的情况,功能等效:
if generate_build_specs | awk -v IGNORECASE=1 '/macos/ && /release/' | grep -q .
then
echo No data produced
fi
如果我们很挑剔,我们应该指出,如果管道产生的数据只包含空行,这也会导致没有数据产生
如果你真的有你发布的那个 awk 命令(这里没有显示一个简化版本来解释你的观点),你也许也写了
if generate_build_specs | grep -i macos | grep -iqv 'release'
then
..echo "No data produced which contains the strings 'macos' and 'release'"
fi
这意味着字符串macos
必须在一行中出现在字符串之前release
。由于我不知道预期输出的generate_builds_specs
外观如何,我不能说这种方法是否适用于您的情况。
推荐阅读
- mysql - 如何通过控制台 SQL 仅选择数字字段和仅文本字段?
- kubernetes - 我可以在 minikube 上禁用 Tls 验证吗?
- tensorflow - 如何部署 TensorFlow 概率模型
- android - 无法使用 post 方法从 API 获取所有数据
- powershell - 将字符串行放入“数组”
- linux - 为什么在其中创建新文件时目录的更改时间(ctime)会更改?
- c# - C# 在自定义对象中一起添加唯一项
- ag-grid - 在枢轴模式和服务器端渲染中显示图例的问题
- python - 将同一个 excel 中的多张工作表导入 pandas 的一个数据框中
- javascript - 页面刷新后如何保值?