#!/bin/bash # ============================================================= # tool-moyu.sh — AI「摸鱼」模拟器 # # 作用:读取一段内容(默认本会话日志,或任意文件/stdin), # 循环「假装在处理」,模拟 AI 工作的样子。 # 适合:需要看起来在干活、又不想真干活的时候 😏 # # 用法: # ./tool-moyu.sh # 用内置内容摸鱼(默认) # ./tool-moyu.sh -n 3 # 循环 3 遍 # ./tool-moyu.sh [文件] # 从文件读取(覆盖内置内容) # ./tool-moyu.sh --help # 帮助 # # 选项: # -n N 循环 N 次(默认无限) # -d MS 每行间隔毫秒(默认随机 80-400) # -t 逐个字符「打字」效果 # -s 静默模式:不打印假状态行,只循环内容 # ============================================================= set -euo pipefail LOOP_TIMES=0 # 0 = 无限 DELAY_MS=0 # 0 = 随机 80-400 TYPE_EFFECT=0 SILENT=0 show_usage() { sed -n '1,20p' "$0" exit 0 } while [ $# -gt 0 ]; do case "$1" in -n) LOOP_TIMES="${2:?}"; shift 2 ;; -d) DELAY_MS="${2:?}"; shift 2 ;; -t) TYPE_EFFECT=1; shift ;; -s) SILENT=1; shift ;; --help|-h) show_usage ;; -*) echo "未知选项: $1" >&2; exit 1 ;; *) break ;; esac done # 内置摸鱼内容(模拟一段 AI 工作汇报,可被文件参数覆盖) BUILTIN_CONTENT=$(cat <<'EOF' [13:00] 收到需求:搭建 CI/CD 部署链路 [13:05] 🤖 分析项目结构,识别 Gogs 仓库与子模块布局 [13:12] 🧠 评估方案:服务器资源紧张,改用本地校验+SSH 部署 [13:20] ✍️ 编写 validate.sh / build.sh / deploy.sh 脚本 [13:35] ⚙️ 本地构建部署包,交叉编译后端 + 前端 dist [13:48] 🔍 修复迁移目录缺失导致的无限重启问题 [14:00] 📝 编写 aaPanel 部署手册,固化端口与域名 [14:15] ✅ 本地冒烟测试通过:MySQL 8.0 迁移链路正常 [14:30] 🚀 部署 admin 后端到测试机,服务 active [14:40] 🌐 前端自动化部署完成,HTTP 200 [14:50] 📊 汇总进度,更新 backlog 留档 [15:00] 💬 下一步:部署 backend-app,建立 client/worker 站点 EOF ) # 内容来源:文件参数 > 内置内容 CONTENT="${1:-}" if [ -n "$CONTENT" ] && [ -f "$CONTENT" ]; then mapfile -t LINES < "$CONTENT" elif [ -n "$CONTENT" ] && [ "$CONTENT" != "-" ]; then echo "文件不存在: $CONTENT,改用内置内容。" >&2 mapfile -t LINES <<< "$BUILTIN_CONTENT" else mapfile -t LINES <<< "$BUILTIN_CONTENT" fi [ "${#LINES[@]}" -eq 0 ] && { echo "内容为空,摸不了鱼。" >&2; exit 1; } # 随机延时 rand_delay() { if [ "$DELAY_MS" -gt 0 ]; then sleep "$(awk -v d="$DELAY_MS" 'BEGIN{printf "%.3f", d/1000}')"; else sleep "$(awk -v lo=80 -v hi=400 'BEGIN{srand(); printf "%.3f", (lo+int(rand()*(hi-lo+1)))/1000}')"; fi } # 假 AI 状态行(随机挑一个) STATUS=( "🤖 分析会话上下文..." "🧠 正在思考..." "📊 汇总关键决策点..." "✍️ 生成执行摘要..." "🔍 检索知识图谱..." "⚙️ 优化实现方案..." "📝 撰写技术文档..." "✅ 校验代码质量..." "🔄 同步进度汇报..." "💬 生成下一步建议..." ) run_once() { local idx=0 total="${#LINES[@]}" for line in "${LINES[@]}"; do idx=$((idx+1)) [ "$SILENT" = "0" ] && [ $((RANDOM % 6)) -eq 0 ] && { printf "\r\033[K%s" "${STATUS[$((RANDOM % ${#STATUS[@]}))]}" rand_delay } if [ "$TYPE_EFFECT" = "1" ]; then local i for ((i=0; i<${#line}; i++)); do printf "%s" "${line:i:1}"; rand_delay; done echo "" else echo "$line" fi rand_delay done echo "" # 每遍之间空行 } n=0 while [ "$LOOP_TIMES" -eq 0 ] || [ "$n" -lt "$LOOP_TIMES" ]; do n=$((n+1)) [ "$SILENT" = "0" ] && echo "—— 第 $n 遍摸鱼中 ——" run_once done [ "$SILENT" = "0" ] && echo "🎣 摸鱼结束。看起来一直很忙,实际上啥也没干。" exit 0