如何将bash的while循环条件作为参数传入timeout函数
实现方案
你需要把完整的while循环逻辑包裹为shell的执行参数传入timeout即可,因为while是shell的内置语法,不是独立可执行程序,需要指定shell实例来运行这段逻辑。
基础用法示例
以下是60秒内每隔1秒打印一次测试内容的单行命令:
timeout 60s sh -c 'while true; do echo "running..."; sleep 1; done'
各部分含义:
timeout 60s:指定超时时间为60秒,时间到后自动终止后续启动的子进程sh -c:启动一个sh shell实例,执行后续引号包裹的命令串,你也可以根据需求换成bash、zsh等对应shell- 单引号内的内容就是你自己要实现的完整while循环逻辑,所有循环内的判断、执行操作都可以写在这个区间内
特殊场景处理
如果你的循环逻辑内需要用到单引号,可以选择两种处理方式:
- 外层改用双引号包裹循环逻辑,内部变量、特殊符号前加反斜杠转义:
timeout 60s bash -c "count=0; while [ \$count -lt 100 ]; do echo 第\$((count++))次执行; sleep 0.5; done"
- 用
'\''格式转义内部的单引号:
timeout 60s sh -c 'while true; do echo '\''当前输出内容带单引号'\''; sleep 1; done'
内容的提问来源于stack exchange,提问作者sepuko
相关产品推荐
相关产品推荐

