【发布时间】:2021-08-19 09:16:29
【问题描述】:
考虑下一个 sn-p。
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) 这样的东西在流中,而不是从那里拿走。
当然,我知道一种解决方法。即
var="$(cat)"; if test -n "$var"; echo "blah:: $var" ; fi
【问题讨论】:
-
这不是一个 bash 问题,而是一个概念问题。你不能做这个。假设您进行了这样的测试并确定输入流为空。 .0007ns 之后,流中可能有数据,因此您的测试毫无意义。
-
我可以测试 EOF。在 C/C++ 中,我可以肯定。所以可能有一个工具可以完成这项工作,不是吗?
-
代码中的
$(cat)是否试图处理generate_build_specs的未过滤(通过awk)输出? -
feof()不是这样工作的。完全没有。feof仅告诉您读取操作是否由于错误或到达文件末尾而返回 EOF。你可以getchar,然后ungetc,但这并不是不读就确定文件中是否有数据;它正在显式读取一个字节(该字节现在对任何其他读取器都不可用)。 -
@kyb,您可以
pollfd 并检查是否在revents中设置了 POLLNVAL。