关于实现Bash脚本倒计时暂停/恢复功能的技术问询
实现带暂停/恢复功能的Git Bash倒计时调度脚本
我刚好搞定过类似的需求,下面这个脚本完全符合你的要求——打开Git Bash后显示倒计时提示,支持用户随时暂停/恢复,无人干预时自动执行目标脚本。
完整脚本代码
#!/bin/bash # 可配置参数 COUNT_DOWN=60 TARGET_SCRIPT="./your-target-script.sh" # 替换成你的目标脚本实际路径 # 初始化状态变量 remaining=$COUNT_DOWN paused=0 # 显示操作提示 echo "The script is about to start in $COUNT_DOWN seconds." echo "Press 'p' to pause, 'r' to resume, or wait for automatic execution." echo "" # 倒计时主循环 while [ $remaining -gt 0 ]; do # 未暂停时,更新并显示剩余时间 if [ $paused -eq 0 ]; then # 用\r实现单行刷新,避免终端输出刷屏 echo -ne "Remaining time: $remaining seconds\033[0K\r" sleep 1 remaining=$((remaining - 1)) fi # 每秒监听一次用户输入(超时1秒,不阻塞倒计时) read -t 1 -n 1 key if [ $? -eq 0 ]; then case $key in p|P) if [ $paused -eq 0 ]; then paused=1 echo -ne "\nCountdown paused. Press 'r' to resume.\033[0K\n" fi ;; r|R) if [ $paused -eq 1 ]; then paused=0 echo -ne "Resuming countdown... Remaining: $remaining seconds\033[0K\n" fi ;; *) echo -ne "\nInvalid input. Only 'p' (pause) and 'r' (resume) are allowed.\033[0K\n" ;; esac fi done # 倒计时结束,执行目标脚本 echo -ne "\nCountdown complete! Executing target script...\033[0K\n" exec "$TARGET_SCRIPT"
关键功能说明
- 单行刷新倒计时:用
echo -ne结合\r实现剩余时间的实时单行更新,不会让终端被一堆倒计时信息刷屏,体验更清爽。 - 无阻塞输入监听:
read -t 1 -n 1 key设置1秒超时,每秒检查一次用户输入,既不耽误倒计时,又能及时响应操作。 - 暂停/恢复逻辑:用
paused变量标记状态,暂停时停止倒计时,恢复后从当前剩余时间继续。 - 容错处理:对无效输入给出明确提示,避免用户困惑。
使用步骤
- 将上述代码保存为
countdown-launcher.sh(名字随便取)。 - 在Git Bash里给脚本添加执行权限:
chmod +x countdown-launcher.sh。 - 修改脚本里的
TARGET_SCRIPT为你实际要运行的脚本路径(绝对路径或相对路径都可以)。 - 运行脚本:
./countdown-launcher.sh。
内容的提问来源于stack exchange,提问作者R99
相关产品推荐
相关产品推荐

