请求修复等待Docker服务启动的Bash脚本问题
修复等待Docker服务启动的Bash脚本
你的脚本问题出在until语句里错误使用了[ ](test命令),test命令无法直接处理管道输出,而且我们应该利用命令的退出状态码来判断服务是否启动。
修复后的代码:
until service docker status | grep -q "active (running)" do echo "等待Docker服务启动..." sleep 1 done echo "Docker服务已启动"
关键修改点:
- 去掉了
[ ],直接让until判断管道命令的退出状态:grep找到"active (running)"时退出码为0,until会终止循环;没找到时退出码非0,继续循环。 - 添加了
-q参数给grep,让它静默输出(只返回退出码,不打印匹配内容),避免循环里重复输出冗余信息。 - 替换了循环内的重复命令为提示信息,更直观。
如果你的系统使用systemctl管理服务(多数现代Linux发行版),可以用更简洁可靠的写法:
until systemctl is-active --quiet docker do echo "等待Docker服务启动..." sleep 1 done echo "Docker服务已启动"
这个写法直接利用systemctl is-active命令的状态判断,无需解析文本输出,兼容性和稳定性更好。
内容的提问来源于stack exchange,提问作者KeyB0rys
相关产品推荐
相关产品推荐

