Loop命令参数详解:--every、--for-duration与--summary的高级用法

📅 2026/8/2 23:59:48 👁️ 阅读次数 📝 编程学习
Loop命令参数详解:--every、--for-duration与--summary的高级用法

Loop命令参数详解:--every、--for-duration与--summary的高级用法

【免费下载链接】LoopUNIX's missing `loop` command项目地址: https://gitcode.com/gh_mirrors/loop5/Loop

Loop是UNIX系统中缺失的loop命令,它让你能在喜爱的shell中编写强大且直观的循环单行命令,轻松实现定时执行、持续监控和结果统计等功能。本文将详细介绍Loop命令中三个核心参数--every--for-duration--summary的高级用法,帮助你掌握高效循环的秘诀。

一、--every:精准控制循环间隔时间

--every参数允许你为循环设置精确的时间间隔,支持从微秒到年的人性化时间格式,让定时执行任务变得简单直观。

基础用法:固定间隔执行命令

最常见的用法是按固定时间间隔重复执行命令,例如每5秒运行一次date命令显示当前时间:

loop --every 5s -- date

这条命令会每隔5秒输出一次系统时间,直到你按下Ctrl+C停止。

高级技巧:结合其他参数实现复杂逻辑

--every可以与--for-duration组合使用,实现限定总时长的定时循环。例如,在8秒内每2秒执行一次date命令:

loop --for-duration 8s --every 2s -- date

执行结果会显示4次时间输出(分别在0s、2s、4s、6s时),8秒后自动停止。

支持的时间单位

Loop使用humantime库解析时间格式,支持的单位包括:

  • us(微秒)、ms(毫秒)、s(秒)
  • m(分钟)、h(小时)、d(天)
  • w(周)、mon(月)、y(年)

示例:每30分钟执行一次备份脚本

loop --every 30m -- ./backup_script.sh

二、--for-duration:限制循环总执行时间

--for-duration参数用于设置循环的总持续时间,到达指定时间后循环自动停止,非常适合需要在有限时间内持续监控或执行任务的场景。

基础用法:设置循环运行时长

例如,让ls命令持续执行10分钟后自动停止:

loop --for-duration 10min -- ls

高级应用:超时控制与错误处理

结合--duration-error参数,当循环因达到时长限制而停止时,Loop会返回124错误码(与timeout命令一致),便于在脚本中进行错误处理:

loop --every 5s --until-success --for-duration 180s --duration-error -- './do_thing.sh'

这条命令会每5秒尝试执行一次do_thing.sh,持续3分钟(180秒),如果3分钟内仍未成功执行,则返回错误码124。

时间格式灵活性

--every一样,--for-duration也支持人性化时间格式,例如:

  • --for-duration 2h30m(2小时30分钟)
  • --for-duration 1d(1天)
  • --for-duration 30s(30秒)

三、--summary:生成执行结果统计报告

--summary参数会在循环结束后生成一份详细的执行结果统计报告,包括总运行次数、成功次数和失败次数,帮助你快速了解命令的执行情况。

基础用法:简单统计成功与失败

例如,执行3次echo $COUNT命令并查看摘要:

loop --num 3 --summary -- 'echo $COUNT'

输出结果:

0 1 2 Total runs: 3 Successes: 3 Failures: 0

错误详情展示

当命令执行失败时,--summary会显示失败的退出码:

loop --num 3 --summary -- 'ls -foobarbatz'

输出结果:

ls: invalid option -- 'f' Try 'ls --help' for more information. ls: invalid option -- 'f' Try 'ls --help' for more information. ls: invalid option -- 'f' Try 'ls --help' for more information. Total runs: 3 Successes: 0 Failures: 3 (2, 2, 2)

括号中的数字是每次失败的退出码。

实用场景:监控命令稳定性

在调试不稳定的脚本时,--summary可以帮助你统计成功率:

loop --every 1s --for-duration 10s --summary -- './unstable_script.sh'

这条命令会在10秒内每秒执行一次脚本,并在结束时显示成功和失败的统计信息。

四、参数组合:构建强大的循环逻辑

--every--for-duration--summary三个参数组合使用,可以实现更复杂的循环需求。

示例1:定时监控网站可用性

每5秒检查一次网站是否返回200状态码,持续监控3分钟,并在结束时显示统计结果:

loop --every 5s --for-duration 3m --summary --until-contains 200 -- 'curl -sw "%{http_code}" http://example.com'

示例2:有限时间内重试失败命令

每15秒尝试执行一次命令,最多尝试5次或持续3分钟,以先到者为准,并显示执行摘要:

loop --every 15s --for-duration 3m --num 5 --summary --until-success -- './flaky_command.sh'

示例3:周期性数据采集与统计

每小时采集一次系统负载,持续24小时,并在结束时生成统计报告:

loop --every 1h --for-duration 24h --summary -- 'uptime >> load_log.txt'

五、总结

Loop命令的--every--for-duration--summary参数为UNIX用户提供了强大的循环控制能力。通过灵活运用这些参数,你可以轻松实现定时执行、超时控制和结果统计等高级功能,让命令行循环变得简单而高效。无论是系统监控、自动化测试还是日常任务处理,Loop都能成为你得力的命令行工具。

要开始使用Loop,你可以通过以下方式安装:

  • Rust用户:cargo install loop-rs
  • Snap用户:snap install loop-rs --beta
  • Homebrew用户:brew tap miserlou/loop https://github.com/Miserlou/Loop.git && brew install loop --HEAD

掌握这些参数的使用技巧,将帮助你在命令行环境中更高效地完成各种循环任务,提升工作效率。

【免费下载链接】LoopUNIX's missing `loop` command项目地址: https://gitcode.com/gh_mirrors/loop5/Loop

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考