Bash:循环直到命令退出状态等于 0

2024-03-28

我在本地计算机上安装了 netcat,并在端口 25565 上运行了一个服务。使用以下命令:

nc 127.0.0.1 25565 < /dev/null; echo $?

Netcat 检查端口是否打开,如果打开则返回 0,如果关闭则返回 1。

我正在尝试编写一个 bash 脚本来无限循环并每秒执行上述命令,直到命令的输出等于 0(端口打开)。

我当前的脚本只是不断地循环“...”,即使在端口打开之后(1 变成 0)。

until [ "nc 127.0.0.1 25565 < /dev/null; echo $?" = "0" ]; do
         echo "..."
         sleep 1
     done
echo "The command output changed!"

我在这里做错了什么?


把事情简单化

重击和其他sh贝壳提供了一个until ... do ... done loop https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_10:

until nc -z 127.0.0.1 25565
do
    echo ...
    sleep 1
done

只是让 shell 隐式处理退出状态

shell可以处理退出状态(记录在$?)有两种方式,显式和隐式。

明确:status=$?,这允许进一步处理。

隐式:

对于每一个陈述,在你的脑海,在命令中添加“成功”一词,然后添加if, until or while围绕它们进行构建,直到该短语有意义为止。

until nc succeeds; do ...; done

* Bash 手册:until ... do ... 循环 https://www.gnu.org/software/bash/manual/html_node/Looping-Constructs.html#index-until


The -z选项将停止nc从读取标准输入,所以没有必要< /dev/null重定向。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Bash:循环直到命令退出状态等于 0 的相关文章

随机推荐

  • 无法将搜索栏拖动到滚动视图内

    如果这个问题在其他地方得到了回答 我深表歉意 我找不到任何有同样问题的人 我将 SeekBar 添加到位于嵌套 ScrollView 内的relativelayout 但是 我无法拖动搜索栏的拇指 我可以沿着其路径单击来更改其值 但无法拖动
  • 模板类的模板成员函数的类外定义的语法

    template
  • 无法计算表达式,因为代码已优化或本机框架位于调用堆栈顶部

    我正在开发一个网站 用户可以在该网站上提交一些信息 提交信息后 我尝试同时发送两封邮件 一封发送给我的销售团队 一封发送给我网站上的访问者 在发送邮件时 我在使用重定向到另一个页面时收到以下错误Response Redirect http
  • 在 Windows 10 中使用 PS 将程序(带参数)固定到任务栏

    我可以使用下面的代码将程序固定到 Windows 10 任务栏 感谢this https stackoverflow com questions 31720595 pin program to taskbar using ps in win
  • 在 SQLAlchemy 中使用 Postgres/PostGIS 视图

    两个问题 我想在我的 PostGIS DB 中生成一个视图 如何将此视图添加到我的 Geometry columns 表中 我必须做什么 才能将视图与 SQLAlchemy 一起使用 SQLAlchemy 的表和视图之间有区别吗 或者我可以
  • AuthenticationHeaderValue 与 NetworkCredential

    我正在尝试使用 HttpClient 为 HTTP Post 或 HTTP Get 编写客户端 当谷歌搜索时 我遇到了这些在 HttpClient 对象中设置这些身份验证的方法 一个使用 NetworkCredential 另一个使用 Au
  • Log4net keepLo​​gFileNameExtension 不起作用

    这是我的 log4net 配置 滚动日志文件创建的扩展名错误 第一个文件使用 log debug txt 名称创建 滚动文件使用 log debug txt 1 创建 但理想情况下它应该是 log debug 1 txt 我使用preser
  • 用于商业应用程序的本机 .NET 版本的 Rsync 可用吗?

    目前我们正在评估是否可以提供rsync http en wikipedia org wiki Rsync对我们销售的应用程序的支持 我用谷歌搜索并找到了一些参考资料 rsync 的本机 Window 版本 http www backupce
  • 当 docker 使用 `/bin/sh -c` 运行节点脚本时,SIGTERM 无法到达节点脚本

    当我的 Dockerfile 结尾时 CMD node docker 使用以下命令运行该容器 bin sh c node 而不是简单地node 我知道 我可以这样做CMD node 我认为这种行为实际上很好 因为这意味着在容器内部PID1
  • Xamarin Forms iOS 错误任务图标

    我认为有一个非常简单的问题 但我不太确定我是否做错了什么或者这是否是 Xamarin 问题 我有一个 iOS Xamarin Forms 项目 在该项目中 我无法设置按两次主页按钮时显示在 任务 视图中的 任务 图标 它始终显示 xamar
  • 对字符串不变性的困惑

    我有以下代码 public class StaticImplementer private static String str ABC public static void main String args str str XYZ 问题 这
  • C++ 类对象的引用和非引用返回 - 为什么输出相同?

    考虑以下代码 class Test public int data Test data 9 Test myfunction void print cout lt lt data lt
  • Symfony 应用程序 - 如何将计算字段添加到 Propel 对象?

    处理 Propel 对象的计算字段的最佳方式是什么 假设我有一个对象 Customer 它有一个相应的表 customers 并且每一列对应于我的对象的一个 属性 我想做的是 在视图 A 上使用它时 向我的对象添加一个计算属性 已完成订单数
  • 将 ncurses 窗口保持在前台

    我的应用程序正在使用 ncurses 并且有几个正在不断更新的窗口 在该应用程序中 当用户点击 q 时 我有一个充当 消息框 例如对话框 的窗口 询问他们是否要关闭 在其他窗口更新之前 这一切正常 此时 其他窗口将绘制在对话框上 使其 部分
  • 如何使用 id 获取 JavaFx 中的元素?

    我是 FXML 新手 我正在尝试使用以下命令为所有按钮单击创建一个处理程序switch 然而 为了做到这一点 我需要使用 和 id 获取元素 我已经尝试了以下方法 但由于某种原因 也许是因为我是在控制器类中而不是在主类中执行此操作 我收到了
  • DataOutputStream#writeBytes(String) 与 BufferedWriter#write(String)

    我想为我的报告创建一个 HTML 文件 报告中的内容可以通过使用创建BufferedWriter write String File f new File source htm BufferedWriter bw new BufferedW
  • 计算 Matplotlib 文本旋转[重复]

    这个问题在这里已经有答案了 我试图弄清楚如何在 matplotlib 中旋转文本以与图中的曲线对齐 但我还没有弄清楚什么转换可以为旋转文本提供正确的坐标系以匹配数据坐标中的特定斜率 这是绘制一条线并尝试沿其对齐一些文本的最小示例 Make
  • 如何设置AlertDialog中正负按钮的顺序?

    为什么我要这样做完全是另一个讨论 但我需要找出使我的所有警报对话框在右侧都有肯定按钮的最佳方法 请注意 在 3 0 及更低版本中 按钮通常显示为 确定 取消 而在 4 0 及更高版本中 按钮通常显示为 取消 确定 我想强制我的应用程序以最简
  • Xcode:在每次构建之前运行直接修改源代码的脚本

    我做了什么 我有一个脚本 阅读一些配置文件来生成源代码片段 找到相关的 Objective C 源文件并 将源代码的某些部分替换为步骤 1 中生成的代码 和一个 Makefile 它有一个特殊的时间戳文件作为 make 目标 配置文件作为目
  • Bash:循环直到命令退出状态等于 0

    我在本地计算机上安装了 netcat 并在端口 25565 上运行了一个服务 使用以下命令 nc 127 0 0 1 25565 lt dev null echo Netcat 检查端口是否打开 如果打开则返回 0 如果关闭则返回 1 我正