首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >测试输入流是否不为空而不使用来自它的数据。

测试输入流是否不为空而不使用来自它的数据。
EN

Stack Overflow用户
提问于 2021-08-19 09:16:29
回答 3查看 112关注 0票数 0

考虑下一个片段。

代码语言:javascript
复制
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),而不是从那里拿走的。

当然,我知道一个解决办法。i.e

代码语言:javascript
复制
var="$(cat)"; if test -n "$var"; echo "blah:: $var" ; fi
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-08-21 10:58:19

在讨论中,我意识到

,如果没有读取至少一个字符,就无法检查流是否结束。

input_data_available不能在Bash中实现。这是一个关于流的概念性问题。

因此,当前的解决方案是将输入存储到变量,然后处理它。

代码语言:javascript
复制
var="$(cat)"; if test -n "$var"; then echo "::ERROR:: $var" ; fi

另一种更好的(即简洁的)方法是:

代码语言:javascript
复制
sed -zE 's,^.+$,::ERROR:: \0\n,'

这意味着只有在输入不是空的情况下,才会增加字符串和输出。Regexp ^.+$检查是否至少有一个符号。但我认为,作为所有的单身汉,这是一个更难读。

谢谢大家的参与。

票数 0
EN

Stack Overflow用户

发布于 2021-08-19 09:29:15

这并不完全是您所要求的,但是对于您的情况而言,在功能上是相当的:

代码语言:javascript
复制
if generate_build_specs | awk -v IGNORECASE=1 '/macos/ && /release/' | grep -q .
then
  echo No data produced
fi

如果我们挑挑拣拣,我们应该指出,如果管道只生成由空行组成的数据,这也会导致不产生数据。

如果您确实有您发布的awk命令(并且没有在这里显示一个简化的版本来解释您的观点),那么您也可以编写

代码语言:javascript
复制
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的预期输出是什么样子,所以我不能说这种方法在您的情况下是否有效。

票数 1
EN

Stack Overflow用户

发布于 2021-08-19 18:44:53

你不需要冲向溪流。只需将输出存储在变量中即可。

代码语言:javascript
复制
buildspec=$(generate_build_specs | awk -v IGNORECASE=1 '/macos/ && /release/')
if [[ -n "${buildspec}" ]]; then
   printf "%s\n" "FIXME. Cannot build 'macos release' until it is fixed." \
        "Buildspec dropped:" "${buildspec}"
fi

我使用printf来获取您可能需要的新行,您也可以使用echo 3次。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68845115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档