Kaynağa Gözat

feat: 添加 update-client.sh 的 Windows (Git Bash) 兼容性支持

- 添加 detect_os() 函数实现操作系统自动检测(Windows/Linux/macOS)
- 实现跨平台临时目录处理(Windows 使用 %TEMP%,Linux/macOS 使用 /tmp)
- 支持 Windows 和 Linux/macOS 不同的用户名环境变量
- 优化锁文件路径,根据操作系统自动选择合适的临时目录
- 添加 show_os_info() 函数显示运行环境信息
- 创建详细的 Windows 使用说明文档

改动文件:
- update-client.sh
- update-client-windows使用说明.md(新增)
dengdx 3 hafta önce
ebeveyn
işleme
b6ccf567ec
2 değiştirilmiş dosya ile 209 ekleme ve 1 silme
  1. 162 0
      update-client-windows使用说明.md
  2. 47 1
      update-client.sh

+ 162 - 0
update-client-windows使用说明.md

@@ -0,0 +1,162 @@
+# update-client.sh Windows 使用说明
+
+## 概述
+
+`update-client.sh` 脚本已经过修改,现在支持在 Windows (Git Bash) 环境中运行。该脚本用于从版本服务器下载并更新 H5 应用。
+
+## Windows 兼容性改进
+
+### 1. 操作系统检测
+脚本会自动检测运行环境:
+- Windows (Git Bash/MINGW/MSYS/Cygwin)
+- Linux
+- macOS
+
+### 2. 跨平台临时目录
+- **Windows**: 使用 `%TEMP%` 或 `%TMP%` 环境变量
+- **Linux/macOS**: 使用 `/tmp`
+
+### 3. 用户名处理
+- **Windows**: 优先使用 `%USERNAME%` 环境变量
+- **Linux/macOS**: 使用 `$USER` 环境变量
+
+### 4. 锁文件路径
+锁文件会根据操作系统自动选择合适的临时目录,避免路径问题。
+
+## 在 Windows 上运行
+
+### 前置要求
+
+1. **Git Bash**: 确保已安装 Git for Windows
+2. **必需工具**: Git Bash 通常已包含以下工具
+   - `curl`
+   - `wget`
+   - `tar`
+   - `grep`
+   - `sort`
+
+### 运行方式
+
+#### 1. 交互模式
+```bash
+./update-client.sh
+```
+
+脚本会提示您输入:
+- 用户名 (默认: deploy)
+- 密码
+- 下载目录 (默认: ./h5)
+- 是否包含 static 文件夹
+- 版本选择
+
+#### 2. 非交互模式(推荐)
+```bash
+# 不包含 static 文件夹
+./update-client.sh -u deploy -p mypassword -d ./h5 -v latest -y
+
+# 包含 static 文件夹
+./update-client.sh -u deploy -p mypassword -d ./h5 -v latest -y --include-static
+
+# 指定特定版本
+./update-client.sh -u deploy -p mypassword -v v1.1.5-20251129-062104 -y
+```
+
+#### 3. 静默模式
+```bash
+./update-client.sh -u deploy -p mypassword -v latest -y -s
+```
+
+### 命令行选项
+
+| 选项 | 说明 |
+|------|------|
+| `-u, --user USERNAME` | 指定用户名(默认: deploy) |
+| `-p, --password PASS` | 指定密码 |
+| `-d, --dir DIRECTORY` | 指定下载目录(默认: ./h5) |
+| `-v, --version VERSION` | 指定版本号(默认: latest) |
+| `-i, --include-static` | 包含 static 文件夹更新 |
+| `-y, --yes` | 跳过确认提示 |
+| `-s, --silent` | 静默模式(最小输出) |
+| `-h, --help` | 显示帮助信息 |
+
+## 脚本运行流程
+
+1. **检测操作系统**: 自动识别 Windows/Linux/macOS
+2. **初始化日志**: 在 `./logs` 目录创建日志文件
+3. **检查依赖工具**: 确认 curl, wget, tar 可用
+4. **创建锁文件**: 防止并发执行
+5. **服务器连接测试**: 验证用户名和密码
+6. **版本选择**: 显示可用版本列表
+7. **备份当前版本**: 自动备份现有文件
+8. **下载更新**: 从服务器下载指定版本
+9. **验证完整性**: 检查 MD5/SHA256 校验和(如果存在)
+10. **清理**: 删除锁文件
+
+## 日志文件
+
+日志文件保存在 `./logs` 目录,文件名格式:
+```
+update_YYYYMMDD_HHMMSS.log
+```
+
+## 故障排除
+
+### 1. 权限问题
+如果遇到权限错误,在 Git Bash 中运行:
+```bash
+chmod +x update-client.sh
+```
+
+### 2. 临时目录问题
+如果 `%TEMP%` 不可用,脚本会回退到 `/tmp`
+
+### 3. 锁文件残留
+如果脚本异常退出,可能留下锁文件:
+```bash
+# 手动删除锁文件
+rm -f $TEMP/update-client-$USERNAME.lock
+```
+
+### 4. 工具缺失
+确认 Git Bash 包含所需工具:
+```bash
+which curl wget tar
+```
+
+## 主要修改内容
+
+1. **添加 `detect_os()` 函数**: 自动检测操作系统类型
+2. **添加 `show_os_info()` 函数**: 显示运行环境信息
+3. **跨平台临时目录**: 根据 OS 选择合适的临时路径
+4. **用户名兼容**: 支持 Windows `%USERNAME%` 变量
+5. **锁文件路径**: 使用跨平台兼容的临时目录
+
+## 示例输出
+
+```
+[INFO] 日志文件: ./logs/update_20251218_103000.log
+[INFO] 检测到操作系统: windows
+[INFO] 临时目录: C:\Users\YourName\AppData\Local\Temp
+[INFO] 当前用户: YourName
+[INFO] 检查依赖工具...
+[✓] 依赖工具检查通过
+[INFO] 已创建锁文件
+[INFO] 用户名: deploy
+...
+```
+
+## 注意事项
+
+1. 脚本会自动备份现有文件,备份文件名包含时间戳
+2. 默认不更新 `static` 文件夹,需要时使用 `-i` 参数
+3. 建议使用非交互模式进行自动化部署
+4. 日志文件包含详细的执行信息,便于故障排查
+
+## 兼容性
+
+✅ Windows 10/11 (Git Bash)  
+✅ Linux (所有发行版)  
+✅ macOS  
+✅ WSL (Windows Subsystem for Linux)  
+✅ Cygwin  
+✅ MSYS2

+ 47 - 1
update-client.sh

@@ -10,6 +10,28 @@
 
 set -euo pipefail  # 严格模式:遇到错误立即退出
 
+# ============================================================================
+# 操作系统检测
+# ============================================================================
+detect_os() {
+    case "$(uname -s)" in
+        MINGW*|MSYS*|CYGWIN*)
+            echo "windows"
+            ;;
+        Linux*)
+            echo "linux"
+            ;;
+        Darwin*)
+            echo "macos"
+            ;;
+        *)
+            echo "unknown"
+            ;;
+    esac
+}
+
+readonly OS_TYPE=$(detect_os)
+
 # ============================================================================
 # 颜色定义
 # ============================================================================
@@ -23,7 +45,19 @@ readonly NC='\033[0m' # No Color
 # 全局变量
 # ============================================================================
 readonly SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
-readonly LOCK_FILE="/tmp/update-client-${USER}.lock"
+
+# 跨平台临时目录和用户名处理
+if [ "$OS_TYPE" = "windows" ]; then
+    # Windows 环境 (Git Bash)
+    TEMP_DIR="${TEMP:-${TMP:-/tmp}}"
+    CURRENT_USER="${USERNAME:-${USER:-unknown}}"
+else
+    # Linux/macOS 环境
+    TEMP_DIR="/tmp"
+    CURRENT_USER="${USER:-unknown}"
+fi
+
+readonly LOCK_FILE="${TEMP_DIR}/update-client-${CURRENT_USER}.lock"
 readonly SERVER="dros.overs.games"
 readonly DEFAULT_USER="deploy"
 readonly DEFAULT_DIR="./h5"
@@ -75,6 +109,15 @@ cleanup() {
 # 设置清理陷阱
 trap cleanup EXIT INT TERM
 
+# ============================================================================
+# 显示操作系统信息
+# ============================================================================
+show_os_info() {
+    log_info "检测到操作系统: $OS_TYPE"
+    log_info "临时目录: $TEMP_DIR"
+    log_info "当前用户: $CURRENT_USER"
+}
+
 # ============================================================================
 # 帮助信息
 # ============================================================================
@@ -573,6 +616,9 @@ main() {
     # 初始化日志
     init_log
     
+    # 显示操作系统信息
+    show_os_info
+    
     # 检查依赖
     check_dependencies