Bash 实时读取 STDOUT 流

2023-12-15

我已经搜索过这个并期望找到数百个解决方案,但没有找到!

我想读取 STDOUT 流并等待特定字符串出现,而不等待该过程完成。

我现在所拥有的,等待该过程完成后再返回输出:

RESP=$(execute some command 2>&1)
if $RESP contains something then do something;

如何实时读取流而不是等待它完成?

EDIT

我尝试了 paddy 建议的以下命令,用于测试与 ping 命令的配合:

RESP=$(ping 192.168.0.1 | grep seq=5 -m1)

但是它不适用于我想使用 dhcpcd 的命令:

RESP=$(dhcpcd wlan0 -r 192.168.0.190 | grep claims -m1)

与 ping 测试不同,命令的输出被发送到控制台而不是被隐藏,并且它永远不会检测到“claims”文本,即使它出现在输出中?


你可以通过管道进入grep进行匹配并在遇到匹配时退出。这也将退出产生输出的程序。

if mycommand | grep something -q; then
    dosomething
fi

如果有任何匹配,上面将退出(-q),但不显示结果。如果你想看到输出,你可以在第一场比赛时退出(使用-m1):

RESP=$(mycommand | grep something -m1)

阅读手册页grep了解更多信息。


如果您不想取消产生输出的程序,您可以尝试将其写入后台文件,然后tail该文件:

mycommand > output &
if tail -f output | grep something -q; then
    dosomething
fi
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Bash 实时读取 STDOUT 流 的相关文章

随机推荐

  • python:multiprocessing.Pipe 和重定向标准输出

    我在用multiprocessing包生成第二个进程 我想将 stdout 和 stderr 重定向到第一个进程 我在用multiprocessing Pipe object dup2 output pipe fileno 1 Where
  • VS 2010 Ultimate:将 ProteusDebugEngine 调试器附加到进程失败

    当将 C NET 4 项目加载到我的主机 Win 7 Ultimate 64 位 上的 VS 2010 Ultimate 中时 我收到错误消息 Attaching the ProteusDebugEngine debugger to pro
  • 使用“.gitattributes”文件修复 Git 存储库中的行结尾

    需要修复什么 我有一个包含单个 md文件 其中包含我正在写的一篇文章 我在几台不同的计算机上编辑该文件 其中一台运行 Linux 另一台运行 Windows 看着一个git diff现在在 Windows 中我做了一些更改 我可以看到我的文
  • @RequestMapping 未正确映射

    我正在尝试设置一个控制器 但不幸的是无法查看输出 一切都正确渲染 当我去http localhost 8080 CMT content edit我收到 404 页面 从 Netbeans 运行我的应用程序会转到http localhost
  • 多对多 Ajax 表单(Symfony2 表单)

    我在 mongodb 中玩家和锦标赛之间存在多对多关系 我希望能够一次将许多玩家添加到锦标赛中 如果没有 ajax 这很简单 但我们有一个包含数千名玩家的数据库 因此表单选择变得巨大 我们想为此使用 ajax 是否可以创建一个小部件 带有j
  • 创建安装程序:从注册表项读取安装路径(例如 wix/installshield/nsis)

    我想创建我的程序的安装程序 但由于安装相当复杂 我需要比 installshield 限量版更高级的东西 我必须从当前的安装程序中运行另一个安装程序 用户是否按 取消 或安装该程序并不重要 我只需要运行它即可 我必须在用户计算机上安装一个包
  • XMl 解析中的空指针异常

    我需要解析 Xml 文档并将值存储在文本文件中 当我解析普通数据 如果所有标签都有数据 时 它工作正常 但如果任何标签没有数据 那么它会抛出我需要的 空指针异常 要做的 为了避免空指针异常 请建议我使用示例代码 示例 XML
  • 无法使用 Laravel SMTP 驱动程序将邮件发送到 gmail 帐户并且没有收到错误

    我正在 Localhost 中构建 Laravel 5 8 应用程序 我这样配置我的 env 文件 MAIL DRIVER smtp MAIL HOST mail mydomain com MAIL PORT 465 took from m
  • 隐式转换没有警告

    g sizeofint cpp std c 11 Wconversion Wall Wextra Werror pedantic errors include
  • Django 的 Cron 示例

    我在互联网上搜索了 Django 中计划作业的工作示例 但我只能找到如何做 但没有给出例子 有人可以分享 Django 框架使用 cron 运行计划任务的工作示例吗 首先创建一个自定义管理命令 该命令将用于将任务添加到 crontab 这是
  • 尝试在 Microsoft Access 中制作高效的日历

    我正在开发一个设备管理系统 前端使用 MS Access mdb 文件 后端使用 SQL Server 2008 如果需要 我可以将前端转换为 MS Access 2010 文件 我创建了一个日历表单 用户可以在其中查看哪些设备已预订 注销
  • 从 Outlook 加载项中获取 HTTP

    我需要调用外部 Web 服务 以便我的外接程序与我们公司的 Java servlet 进行通信 我尝试使用 JavaScriptXMLHttpRequest var http new XMLHttpRequest http open GET
  • 在 Scala 常规类中使用 Lenses

    大多数流行的 Scala JSON 库都能够序列化和反序列化为案例类 不幸的是 在 Scala 2 11 发布之前 案例类可以拥有的参数数量是有限制的 最多 22 个 作为超过此限制的解决方法 可以使用常规类 例如 如何使用 non cas
  • 从具有重复键的字符串创建 dict/json Python

    我有一个可以解析为 JSON 或 dict 对象的字符串 我的字符串变量如下所示 my string variable a 1 b b1 1 b2 2 b b1 3 b2 2
  • ggplot2 geom_smooth 线未显示在我的图表上

    我正在尝试使用绘制的数据添加一条线geom smooth 但我遇到了困难 这是我的代码 plot BG ggplot data geom point aes x Mass LT y BG colour factor Temp f plot
  • Active Directory PrimaryContext.ValidateCredentials 域消歧

    我正在处理两个域 一个是受信任的域 一个域上可能有一个 JohnSmith 另一个域上可能有另一个 JohnSmith 这两个人都需要登录我的应用程序 我的问题 我传入哪个域并不重要 此代码返回 true 我如何知道哪个 JohnSmith
  • 运行“adb shell wm Density 240”更改 Android 设备密度时出错

    我想调整 Android 设备上的屏幕大小 当我运行以下命令时 adb shell wm density 240 or adb shell wm size 800x480 我收到错误 system bin sh wm not found 为
  • 将混合嵌套列表转换为嵌套元组

    如果我有 easy nested list foo bar foofoo barbar 并希望拥有 foo bar foofoo barbar I can do tuple tuple i for i in easy nested list
  • 创建自定义 NSAttributedString.Key

    我正在尝试构建一个简单的笔记应用程序 目前 我关注的是使用不同文本样式设置文本的可能性 例如正文 标题 粗体 斜体等 我用了一个NSAttributedString设置不同的文本样式 现在 我想检测所选文本应用了哪种样式 我认为一个好方法是
  • Bash 实时读取 STDOUT 流

    我已经搜索过这个并期望找到数百个解决方案 但没有找到 我想读取 STDOUT 流并等待特定字符串出现 而不等待该过程完成 我现在所拥有的 等待该过程完成后再返回输出 RESP execute some command 2 gt 1 if R