You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash脚本睡眠期间展示进度出现无限循环、sleep失效问题求助

问题分析
  • while 循环逻辑错误导致无限运行:Bash 中 while 循环会持续执行 do...done 块的内容,只要后面跟随的命令返回值为 0。sleep 命令执行成功永远返回 0,所以你的循环没有任何终止条件,会永远运行。
  • sleep 10 位置错误导致表现异常:你把sleep 10放在了 while 的条件判断位置,脚本启动后会先静默等待 10 秒,才会第一次显示进度动画,动画只会持续 0.5 秒(5 个状态每个停留 0.1 秒),之后又进入 10 秒静默期,这就是你觉得 sleep 语句没有正常生效的原因。
  • 动画显示逻辑有瑕疵:每个进度状态显示 0.1 秒后立刻清空整行,两个状态切换之间会出现空白,动画效果不连贯。
修复方案

如果你的需求是配合某个后台任务显示进度,等任务结束就自动停止进度提示,可以参考如下修改后的代码:

#!/bin/bash

# 替换下面的sleep 15为你自己的耗时命令,后面加&放到后台运行
sleep 15 &
# 获取后台任务的PID
task_pid=$!

spinner=(
"Working    "
"Working.   "
"Working..  "
"Working... "
"Working...."
)

# 循环条件改为判断后台任务是否还在运行
while kill -0 "$task_pid" 2>/dev/null
  do
    for item in "${spinner[@]}"
      do
        echo -en "\r$item"
        sleep .1
      done
  done
# 任务结束后清空进度行,输出结束提示
echo -en "\r              \r"
echo "任务执行完成"

核心修改点

  • 把 while 的条件改为判断后台任务是否存活,任务结束后循环自动终止,不会无限运行
  • 移除了 while 条件里的sleep 10,动画会持续播放直到任务结束
  • 把清屏操作移到了循环结束后,动画切换不会出现空白
  • 数组遍历用"${spinner[@]}"代替${spinner[*]},避免数组元素有空格时出现分词异常

内容的提问来源于stack exchange,提问作者user3819738

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 11:45:05