Forráskód Böngészése

chore(trunk): shfmt 格式化 + node 22 运行时 + 修复 SC1003;补 .trunk 配置

b 1 hete
szülő
commit
12aa35c64e
13 módosított fájl, 458 hozzáadás és 459 törlés
  1. 1 2
      .trunk/trunk.yaml
  2. 6 6
      README.md
  3. 1 1
      exapmle/init-frontend.sh
  4. 60 60
      setup-base.sh
  5. 16 16
      setup-bun.sh
  6. 18 18
      setup-gentool.sh
  7. 232 232
      setup-mysql-cli.sh
  8. 16 16
      setup-pi.sh
  9. 74 74
      setup-pnpm.sh
  10. 3 3
      setup-ssh.sh
  11. 20 20
      tool-cbm-quiet.sh
  12. 1 1
      tool-import-sql.sh
  13. 10 10
      tool-trunk-checker.sh

+ 1 - 2
.trunk/trunk.yaml

@@ -7,12 +7,11 @@ cli:
 runtimes:
   enabled:
     - go@1.19.5
-    - node@18.12.1
+    - node@22.16.0
     - python@3.10.8
 # This is the section where you manage your linters. (https://docs.trunk.io/check/configuration)
 lint:
   enabled:
-    - git-diff-check
     - markdownlint@0.49.1
     - prettier@3.9.6
     - shellcheck@0.8.0

+ 6 - 6
README.md

@@ -4,14 +4,14 @@
 
 ## 初始化脚本
 
-- `setup-gentool.sh`   : 安装 gentool 工具
+- `setup-gentool.sh` : 安装 gentool 工具
 - `setup-mysql-cli.sh` : 安装 MySQL CLI 工具
-- `setup-pnpm.sh`      : 安装 pnpm 包管理器并初始化
-- `setup-ssh.sh`       : 配置 SSH 服务
-- `setup-trunk.sh`     : 安装 trunk 工具并初始化
+- `setup-pnpm.sh` : 安装 pnpm 包管理器并初始化
+- `setup-ssh.sh` : 配置 SSH 服务
+- `setup-trunk.sh` : 安装 trunk 工具并初始化
 
 ## 工具脚本
 
-- `tool-import-sql.sh`    : 导入 SQL 文件
-- `tool-merge-sql.sh`     : 合并 SQL 文件
+- `tool-import-sql.sh` : 导入 SQL 文件
+- `tool-merge-sql.sh` : 合并 SQL 文件
 - `tool-trunk-checker.sh` : 代码 质量检查

+ 1 - 1
exapmle/init-frontend.sh

@@ -8,4 +8,4 @@ if [ -f "/workspace/shell-kit/setup-pnpm.sh" ]; then
 else
 	echo "⚠️ 警告:pnpm 安装脚本不存在,跳过 pnpm 安装"
 fi
-echo ""
+echo ""

+ 60 - 60
setup-base.sh

@@ -7,88 +7,88 @@ apt update
 
 # 检查 unzip 是否已安装
 if command -v unzip >/dev/null 2>&1; then
-    echo "✅ unzip 已安装"
+	echo "✅ unzip 已安装"
 else
-    echo "📥 开始安装 unzip ..."
+	echo "📥 开始安装 unzip ..."
 
-    # 安装 unzip
-    echo "📦 正在安装 unzip ..."
-    if ! apt install unzip; then
-        echo "❌ unzip 安装失败"
-        exit 1
-    fi
+	# 安装 unzip
+	echo "📦 正在安装 unzip ..."
+	if ! apt install unzip; then
+		echo "❌ unzip 安装失败"
+		exit 1
+	fi
 
-    # 验证 unzip 安装是否成功
-    if command -v unzip >/dev/null 2>&1; then
-        echo "✅ unzip 安装成功"
-    else
-        echo "❌ unzip 安装失败"
-        exit 1
-    fi
+	# 验证 unzip 安装是否成功
+	if command -v unzip >/dev/null 2>&1; then
+		echo "✅ unzip 安装成功"
+	else
+		echo "❌ unzip 安装失败"
+		exit 1
+	fi
 fi
 
 # 检查 curl 是否已安装
 if command -v curl >/dev/null 2>&1; then
-    echo "✅ curl 已安装"
+	echo "✅ curl 已安装"
 else
-    echo "📥 开始安装 curl ..."
+	echo "📥 开始安装 curl ..."
 
-    # 安装 curl
-    echo "📦 正在安装 curl ..."
-    if ! apt install curl; then
-        echo "❌ curl 安装失败"
-        exit 1
-    fi
+	# 安装 curl
+	echo "📦 正在安装 curl ..."
+	if ! apt install curl; then
+		echo "❌ curl 安装失败"
+		exit 1
+	fi
 
-    # 验证 curl 安装是否成功
-    if command -v curl >/dev/null 2>&1; then
-        echo "✅ curl 安装成功"
-    else
-        echo "❌ curl 安装失败"
-        exit 1
-    fi
+	# 验证 curl 安装是否成功
+	if command -v curl >/dev/null 2>&1; then
+		echo "✅ curl 安装成功"
+	else
+		echo "❌ curl 安装失败"
+		exit 1
+	fi
 fi
 
 # 检查 wget 是否已安装
 if command -v wget >/dev/null 2>&1; then
-    echo "✅ wget 已安装"
+	echo "✅ wget 已安装"
 else
-    echo "📥 开始安装 wget ..."
+	echo "📥 开始安装 wget ..."
 
-    # 安装 wget
-    echo "📦 正在安装 wget ..."
-    if ! apt install wget; then
-        echo "❌ wget 安装失败"
-        exit 1
-    fi
+	# 安装 wget
+	echo "📦 正在安装 wget ..."
+	if ! apt install wget; then
+		echo "❌ wget 安装失败"
+		exit 1
+	fi
 
-    # 验证 wget 安装是否成功
-    if command -v wget >/dev/null 2>&1; then
-        echo "✅ wget 安装成功"
-    else
-        echo "❌ wget 安装失败"
-        exit 1
-    fi
+	# 验证 wget 安装是否成功
+	if command -v wget >/dev/null 2>&1; then
+		echo "✅ wget 安装成功"
+	else
+		echo "❌ wget 安装失败"
+		exit 1
+	fi
 fi
 
 # 检查 git 是否已安装
 if command -v git >/dev/null 2>&1; then
-    echo "✅ git 已安装"
+	echo "✅ git 已安装"
 else
-    echo "📥 开始安装 git ..."
+	echo "📥 开始安装 git ..."
 
-    # 安装 git
-    echo "📦 正在安装 git ..."
-    if ! apt install git; then
-        echo "❌ git 安装失败"
-        exit 1
-    fi
+	# 安装 git
+	echo "📦 正在安装 git ..."
+	if ! apt install git; then
+		echo "❌ git 安装失败"
+		exit 1
+	fi
 
-    # 验证 git 安装是否成功
-    if command -v git >/dev/null 2>&1; then
-        echo "✅ git 安装成功"
-    else
-        echo "❌ git 安装失败"
-        exit 1
-    fi
+	# 验证 git 安装是否成功
+	if command -v git >/dev/null 2>&1; then
+		echo "✅ git 安装成功"
+	else
+		echo "❌ git 安装失败"
+		exit 1
+	fi
 fi

+ 16 - 16
setup-bun.sh

@@ -8,22 +8,22 @@ source /root/.bashrc
 
 # 检查 bun 是否已安装
 if command -v bun >/dev/null 2>&1; then
-    echo "✅ bun 已安装"
+	echo "✅ bun 已安装"
 else
-    echo "📥 开始安装 bun ..."
+	echo "📥 开始安装 bun ..."
 
-    # 安装 bun
-    echo "📦 正在安装 bun ..."
-    if ! curl -fsSL https://bun.sh/install | bash; then
-        echo "❌ bun 安装失败"
-        exit 1
-    fi
+	# 安装 bun
+	echo "📦 正在安装 bun ..."
+	if ! curl -fsSL https://bun.sh/install | bash; then
+		echo "❌ bun 安装失败"
+		exit 1
+	fi
 
-    # 验证 bun 安装是否成功
-    if command source /root/.bashrc && command -v bun >/dev/null 2>&1; then
-        echo "✅ bun 安装成功"
-    else
-        echo "❌ bun 安装失败"
-        exit 1
-    fi
-fi
+	# 验证 bun 安装是否成功
+	if command source /root/.bashrc && command -v bun >/dev/null 2>&1; then
+		echo "✅ bun 安装成功"
+	else
+		echo "❌ bun 安装失败"
+		exit 1
+	fi
+fi

+ 18 - 18
setup-gentool.sh

@@ -6,25 +6,25 @@
 
 # 检查 gentool 是否已安装
 if command -v gentool >/dev/null 2>&1; then
-    echo "✅ gentool 已安装"
+	echo "✅ gentool 已安装"
 else
-    echo "📥 开始安装 gentool..."
+	echo "📥 开始安装 gentool..."
 
-    # 设置 GOPROXY 环境变量
-    export GOPROXY=https://goproxy.cn,direct
+	# 设置 GOPROXY 环境变量
+	export GOPROXY=https://goproxy.cn,direct
 
-    # 安装 gentool
-    echo "📦 正在安装 gentool..."
-    if ! go install gorm.io/gen/tools/gentool@latest; then
-        echo "❌ gentool 安装失败"
-        exit 1
-    fi
+	# 安装 gentool
+	echo "📦 正在安装 gentool..."
+	if ! go install gorm.io/gen/tools/gentool@latest; then
+		echo "❌ gentool 安装失败"
+		exit 1
+	fi
 
-    # 验证 gentool 安装是否成功
-    if command -v gentool >/dev/null 2>&1; then
-        echo "✅ gentool 安装成功"
-    else
-        echo "❌ gentool 安装失败"
-        exit 1
-    fi
-fi
+	# 验证 gentool 安装是否成功
+	if command -v gentool >/dev/null 2>&1; then
+		echo "✅ gentool 安装成功"
+	else
+		echo "❌ gentool 安装失败"
+		exit 1
+	fi
+fi

+ 232 - 232
setup-mysql-cli.sh

@@ -16,181 +16,181 @@ YELLOW='\033[1;33m'
 RED='\033[0;31m'
 NC='\033[0m'
 
-info()  { echo -e "${GREEN}[info]${NC} $1"; }
-warn()  { echo -e "${YELLOW}[warn]${NC} $1"; }
+info() { echo -e "${GREEN}[info]${NC} $1"; }
+warn() { echo -e "${YELLOW}[warn]${NC} $1"; }
 error() { echo -e "${RED}[error]${NC} $1"; }
 
 # ------------------------------------------
 # 检查是否已安装正确的 MySQL 客户端
 # ------------------------------------------
 check_mysql_client() {
-  if command -v mysql >/dev/null 2>&1; then
-    local ver
-    ver=$(mysql --version 2>&1)
-
-    if echo "$ver" | grep -qi "mariadb"; then
-      warn "当前是 MariaDB 客户端: $ver"
-      warn "(MariaDB 用 --ssl=0,MySQL 用 --ssl-mode=DISABLED)"
-      warn "将替换为官方 MySQL 客户端..."
-      return 1
-    fi
-
-    if mysql --help 2>&1 | grep -q "ssl-mode"; then
-      info "✅ 官方 MySQL 客户端已安装: $ver"
-      return 0
-    else
-      warn "MySQL 客户端版本过旧,不支持 --ssl-mode"
-      return 1
-    fi
-  fi
-  return 1
+	if command -v mysql >/dev/null 2>&1; then
+		local ver
+		ver=$(mysql --version 2>&1)
+
+		if echo "$ver" | grep -qi "mariadb"; then
+			warn "当前是 MariaDB 客户端: $ver"
+			warn "(MariaDB 用 --ssl=0,MySQL 用 --ssl-mode=DISABLED)"
+			warn "将替换为官方 MySQL 客户端..."
+			return 1
+		fi
+
+		if mysql --help 2>&1 | grep -q "ssl-mode"; then
+			info "✅ 官方 MySQL 客户端已安装: $ver"
+			return 0
+		else
+			warn "MySQL 客户端版本过旧,不支持 --ssl-mode"
+			return 1
+		fi
+	fi
+	return 1
 }
 
 # ------------------------------------------
 # 清理磁盘空间
 # ------------------------------------------
 cleanup_space() {
-  local needed_kb=${1:-51200}  # 默认需要 50MB
-
-  local avail_kb
-  avail_kb=$(df /var/cache/apt/archives/ 2>/dev/null | awk 'NR==2 {print $4}')  # 单位 KB
-
-  if [ -z "$avail_kb" ] || [ "$avail_kb" -lt "$needed_kb" ]; then
-    warn "磁盘空间不足,尝试清理..."
-    apt-get clean 2>/dev/null || true
-    rm -rf /tmp/* /var/tmp/* 2>/dev/null || true
-
-    avail_kb=$(df /var/cache/apt/archives/ 2>/dev/null | awk 'NR==2 {print $4}')
-    if [ -n "$avail_kb" ] && [ "$avail_kb" -lt "$needed_kb" ]; then
-      warn "清理后空间仍不足 ($((avail_kb / 1024)) MB 可用)"
-      return 1
-    fi
-  fi
-  return 0
+	local needed_kb=${1:-51200} # 默认需要 50MB
+
+	local avail_kb
+	avail_kb=$(df /var/cache/apt/archives/ 2>/dev/null | awk 'NR==2 {print $4}') # 单位 KB
+
+	if [ -z "$avail_kb" ] || [ "$avail_kb" -lt "$needed_kb" ]; then
+		warn "磁盘空间不足,尝试清理..."
+		apt-get clean 2>/dev/null || true
+		rm -rf /tmp/* /var/tmp/* 2>/dev/null || true
+
+		avail_kb=$(df /var/cache/apt/archives/ 2>/dev/null | awk 'NR==2 {print $4}')
+		if [ -n "$avail_kb" ] && [ "$avail_kb" -lt "$needed_kb" ]; then
+			warn "清理后空间仍不足 ($((avail_kb / 1024)) MB 可用)"
+			return 1
+		fi
+	fi
+	return 0
 }
 
 # ------------------------------------------
 # 方式一:从 MySQL 官方 APT 仓库安装
 # ------------------------------------------
 install_from_apt() {
-  info "方式一:从 MySQL 官方 APT 仓库安装..."
-
-  # 检查磁盘空间
-  if ! cleanup_space; then
-    warn "磁盘空间不足,跳过 APT 安装方式"
-    return 1
-  fi
-
-  # 确保 wget 可用
-  if ! command -v wget >/dev/null 2>&1; then
-    apt-get update -qq && apt-get install -y -qq wget 2>/dev/null || {
-      warn "wget 不可用,跳过 APT 安装方式"
-      return 1
-    }
-  fi
-
-  local mysql_repo_deb="/tmp/mysql-apt-config.deb"
-
-  # 清理旧配置
-  rm -f /etc/apt/sources.list.d/mysql.list /etc/apt/sources.list.d/mysql-*.list
-
-  # 下载 MySQL APT 配置包
-  info "下载 MySQL APT 配置包..."
-  wget -q "https://repo.mysql.com/mysql-apt-config_0.8.33-1_all.deb" -O "$mysql_repo_deb" || {
-    warn "下载 MySQL APT 配置包失败"
-    return 1
-  }
-
-  # 非交互式安装配置包
-  DEBIAN_FRONTEND=noninteractive dpkg -i "$mysql_repo_deb" 2>/dev/null || true
-
-  # 修正 sources.list 中的 codename
-  # MySQL APT 仓库不支持 Debian Trixie,强制使用 bookworm
-  if [ -f /etc/apt/sources.list.d/mysql.list ]; then
-    sed -i "s/$(lsb_release -sc 2>/dev/null || echo 'unknown')/bookworm/g" \
-      /etc/apt/sources.list.d/mysql.list 2>/dev/null || true
-  fi
-
-  # 更新 APT 缓存
-  info "更新 APT 缓存..."
-  apt-get update -qq 2>/dev/null || {
-    warn "APT 更新失败"
-    return 1
-  }
-
-  # 安装 MySQL 客户端(优先 mysql-client,备用 mysql-community-client)
-  info "安装 mysql-client..."
-  apt-get install -y -qq mysql-client 2>/dev/null || {
-    warn "mysql-client 安装失败,尝试 mysql-community-client..."
-    apt-get install -y -qq mysql-community-client 2>/dev/null || {
-      warn "APT 安装 MySQL 客户端失败"
-      return 1
-    }
-  }
-
-  return 0
+	info "方式一:从 MySQL 官方 APT 仓库安装..."
+
+	# 检查磁盘空间
+	if ! cleanup_space; then
+		warn "磁盘空间不足,跳过 APT 安装方式"
+		return 1
+	fi
+
+	# 确保 wget 可用
+	if ! command -v wget >/dev/null 2>&1; then
+		apt-get update -qq && apt-get install -y -qq wget 2>/dev/null || {
+			warn "wget 不可用,跳过 APT 安装方式"
+			return 1
+		}
+	fi
+
+	local mysql_repo_deb="/tmp/mysql-apt-config.deb"
+
+	# 清理旧配置
+	rm -f /etc/apt/sources.list.d/mysql.list /etc/apt/sources.list.d/mysql-*.list
+
+	# 下载 MySQL APT 配置包
+	info "下载 MySQL APT 配置包..."
+	wget -q "https://repo.mysql.com/mysql-apt-config_0.8.33-1_all.deb" -O "$mysql_repo_deb" || {
+		warn "下载 MySQL APT 配置包失败"
+		return 1
+	}
+
+	# 非交互式安装配置包
+	DEBIAN_FRONTEND=noninteractive dpkg -i "$mysql_repo_deb" 2>/dev/null || true
+
+	# 修正 sources.list 中的 codename
+	# MySQL APT 仓库不支持 Debian Trixie,强制使用 bookworm
+	if [ -f /etc/apt/sources.list.d/mysql.list ]; then
+		sed -i "s/$(lsb_release -sc 2>/dev/null || echo 'unknown')/bookworm/g" \
+			/etc/apt/sources.list.d/mysql.list 2>/dev/null || true
+	fi
+
+	# 更新 APT 缓存
+	info "更新 APT 缓存..."
+	apt-get update -qq 2>/dev/null || {
+		warn "APT 更新失败"
+		return 1
+	}
+
+	# 安装 MySQL 客户端(优先 mysql-client,备用 mysql-community-client)
+	info "安装 mysql-client..."
+	apt-get install -y -qq mysql-client 2>/dev/null || {
+		warn "mysql-client 安装失败,尝试 mysql-community-client..."
+		apt-get install -y -qq mysql-community-client 2>/dev/null || {
+			warn "APT 安装 MySQL 客户端失败"
+			return 1
+		}
+	}
+
+	return 0
 }
 
 # ------------------------------------------
 # 方式二:直接下载 MySQL 客户端二进制
 # ------------------------------------------
 install_from_binary() {
-  info "方式二:直接下载 MySQL 客户端二进制..."
-
-  # 检查磁盘空间(二进制包大约 300MB 解压,但只需要 2 个文件 ~5MB)
-  local needed_kb=102400  # 100MB for download + extract
-  local avail_kb
-  avail_kb=$(df /tmp 2>/dev/null | awk 'NR==2 {print $4}')
-  if [ -n "$avail_kb" ] && [ "$avail_kb" -lt "$needed_kb" ]; then
-    error "磁盘空间不足 ($((avail_kb / 1024)) MB 可用,需要 ~100 MB)"
-    return 1
-  fi
-
-  # 确保 wget 可用
-  if ! command -v wget >/dev/null 2>&1; then
-    error "wget 不可用,无法下载"
-    return 1
-  fi
-
-  local tmp_dir
-  tmp_dir=$(mktemp -d)
-  local tarball="${tmp_dir}/mysql-${MYSQL_VERSION}-linux-glibc2.28-x86_64.tar.xz"
-  local base_url="https://dev.mysql.com/get/Downloads/MySQL-8.4"
-
-  info "下载 MySQL ${MYSQL_VERSION} 客户端 (约 300MB)..."
-  wget -q --show-progress "${base_url}/$(basename "$tarball")" -O "$tarball" || {
-    error "下载失败"
-    rm -rf "$tmp_dir"
-    return 1
-  }
-
-  # 确保 xz 解压工具可用(.tar.xz 格式需要)
-  if ! command -v xz >/dev/null 2>&1; then
-    warn "xz 未安装,尝试安装 xz-utils..."
-    apt-get install -y -qq xz-utils 2>/dev/null || {
-      warn "apt 安装 xz-utils 失败,改用 Python lzma 模块解压..."
-      # Python 内置了 lzma 模块,无需额外安装
-    }
-  fi
-
-  info "解压(仅提取 mysql 和 mysqladmin)..."
-  local mysql_bin mysqladmin_bin
-  local extract_dir="${tmp_dir}/extract"
-  mkdir -p "$extract_dir"
-
-  if command -v xz >/dev/null 2>&1; then
-    # 有 xz:直接用 tar 解压
-    mysql_bin=$(tar -tJf "$tarball" 2>/dev/null | grep -E 'bin/mysql$' | head -1)
-    mysqladmin_bin=$(tar -tJf "$tarball" 2>/dev/null | grep -E 'bin/mysqladmin$' | head -1)
-    if [ -n "$mysql_bin" ] && [ -n "$mysqladmin_bin" ]; then
-      tar -xJf "$tarball" -C "$extract_dir" "$mysql_bin" "$mysqladmin_bin"
-    else
-      tar -xJf "$tarball" -C "$extract_dir"
-    fi
-  else
-    # 没有 xz:用 Python lzma 模块解压
-    info "使用 Python lzma 模块解压..."
-    python3 -c "
+	info "方式二:直接下载 MySQL 客户端二进制..."
+
+	# 检查磁盘空间(二进制包大约 300MB 解压,但只需要 2 个文件 ~5MB)
+	local needed_kb=102400 # 100MB for download + extract
+	local avail_kb
+	avail_kb=$(df /tmp 2>/dev/null | awk 'NR==2 {print $4}')
+	if [ -n "$avail_kb" ] && [ "$avail_kb" -lt "$needed_kb" ]; then
+		error "磁盘空间不足 ($((avail_kb / 1024)) MB 可用,需要 ~100 MB)"
+		return 1
+	fi
+
+	# 确保 wget 可用
+	if ! command -v wget >/dev/null 2>&1; then
+		error "wget 不可用,无法下载"
+		return 1
+	fi
+
+	local tmp_dir
+	tmp_dir=$(mktemp -d)
+	local tarball="${tmp_dir}/mysql-${MYSQL_VERSION}-linux-glibc2.28-x86_64.tar.xz"
+	local base_url="https://dev.mysql.com/get/Downloads/MySQL-8.4"
+
+	info "下载 MySQL ${MYSQL_VERSION} 客户端 (约 300MB)..."
+	wget -q --show-progress "${base_url}/$(basename "$tarball")" -O "$tarball" || {
+		error "下载失败"
+		rm -rf "$tmp_dir"
+		return 1
+	}
+
+	# 确保 xz 解压工具可用(.tar.xz 格式需要)
+	if ! command -v xz >/dev/null 2>&1; then
+		warn "xz 未安装,尝试安装 xz-utils..."
+		apt-get install -y -qq xz-utils 2>/dev/null || {
+			warn "apt 安装 xz-utils 失败,改用 Python lzma 模块解压..."
+			# Python 内置了 lzma 模块,无需额外安装
+		}
+	fi
+
+	info "解压(仅提取 mysql 和 mysqladmin)..."
+	local mysql_bin mysqladmin_bin
+	local extract_dir="${tmp_dir}/extract"
+	mkdir -p "$extract_dir"
+
+	if command -v xz >/dev/null 2>&1; then
+		# 有 xz:直接用 tar 解压
+		mysql_bin=$(tar -tJf "$tarball" 2>/dev/null | grep -E 'bin/mysql$' | head -1)
+		mysqladmin_bin=$(tar -tJf "$tarball" 2>/dev/null | grep -E 'bin/mysqladmin$' | head -1)
+		if [ -n "$mysql_bin" ] && [ -n "$mysqladmin_bin" ]; then
+			tar -xJf "$tarball" -C "$extract_dir" "$mysql_bin" "$mysqladmin_bin"
+		else
+			tar -xJf "$tarball" -C "$extract_dir"
+		fi
+	else
+		# 没有 xz:用 Python lzma 模块解压
+		info "使用 Python lzma 模块解压..."
+		python3 -c "
 import lzma, tarfile, sys, os
 
 tarball = '$tarball'
@@ -203,9 +203,9 @@ with lzma.open(tarball) as f:
             if member.name.endswith('/bin/mysql') or member.name.endswith('/bin/mysqladmin'):
                 tar.extract(member, path=extract_to)
 " 2>/dev/null || {
-      # 如果 Python 也失败,解压全部
-      info "Python 选择性提取失败,解压全部文件..."
-      python3 -c "
+			# 如果 Python 也失败,解压全部
+			info "Python 选择性提取失败,解压全部文件..."
+			python3 -c "
 import lzma, tarfile
 
 tarball = '$tarball'
@@ -215,68 +215,68 @@ with lzma.open(tarball) as f:
     with tarfile.open(fileobj=f, mode='r|') as tar:
         tar.extractall(path=extract_to)
 " 2>/dev/null || {
-        error "Python 解压也失败"
-        rm -rf "$tmp_dir"
-        return 1
-      }
-    }
-  fi
-
-  # 从解压目录复制二进制文件
-  local mysql_src mysqladmin_src
-  mysql_src=$(find "$extract_dir" -name 'mysql' -type f -path '*/bin/mysql' | head -1)
-  mysqladmin_src=$(find "$extract_dir" -name 'mysqladmin' -type f -path '*/bin/mysqladmin' | head -1)
-
-  if [ -n "$mysql_src" ] && [ -n "$mysqladmin_src" ]; then
-    cp "$mysql_src" "${BIN_INSTALL_DIR}/mysql"
-    cp "$mysqladmin_src" "${BIN_INSTALL_DIR}/mysqladmin"
-  else
-    # 最后尝试:直接找任何 mysql 二进制
-    mysql_src=$(find "$extract_dir" -name 'mysql' -type f | head -1)
-    mysqladmin_src=$(find "$extract_dir" -name 'mysqladmin' -type f | head -1)
-    if [ -z "$mysql_src" ]; then
-      error "解压后找不到 mysql 二进制文件"
-      rm -rf "$tmp_dir"
-      return 1
-    fi
-    cp "$mysql_src" "${BIN_INSTALL_DIR}/mysql"
-    [ -n "$mysqladmin_src" ] && cp "$mysqladmin_src" "${BIN_INSTALL_DIR}/mysqladmin"
-  fi
-
-  chmod +x "${BIN_INSTALL_DIR}/mysql" "${BIN_INSTALL_DIR}/mysqladmin"
-  rm -rf "$tmp_dir"
-
-  info "二进制安装完成"
-  return 0
+				error "Python 解压也失败"
+				rm -rf "$tmp_dir"
+				return 1
+			}
+		}
+	fi
+
+	# 从解压目录复制二进制文件
+	local mysql_src mysqladmin_src
+	mysql_src=$(find "$extract_dir" -name 'mysql' -type f -path '*/bin/mysql' | head -1)
+	mysqladmin_src=$(find "$extract_dir" -name 'mysqladmin' -type f -path '*/bin/mysqladmin' | head -1)
+
+	if [ -n "$mysql_src" ] && [ -n "$mysqladmin_src" ]; then
+		cp "$mysql_src" "${BIN_INSTALL_DIR}/mysql"
+		cp "$mysqladmin_src" "${BIN_INSTALL_DIR}/mysqladmin"
+	else
+		# 最后尝试:直接找任何 mysql 二进制
+		mysql_src=$(find "$extract_dir" -name 'mysql' -type f | head -1)
+		mysqladmin_src=$(find "$extract_dir" -name 'mysqladmin' -type f | head -1)
+		if [ -z "$mysql_src" ]; then
+			error "解压后找不到 mysql 二进制文件"
+			rm -rf "$tmp_dir"
+			return 1
+		fi
+		cp "$mysql_src" "${BIN_INSTALL_DIR}/mysql"
+		[ -n "$mysqladmin_src" ] && cp "$mysqladmin_src" "${BIN_INSTALL_DIR}/mysqladmin"
+	fi
+
+	chmod +x "${BIN_INSTALL_DIR}/mysql" "${BIN_INSTALL_DIR}/mysqladmin"
+	rm -rf "$tmp_dir"
+
+	info "二进制安装完成"
+	return 0
 }
 
 # ------------------------------------------
 # 方式三:提示手动安装
 # ------------------------------------------
 manual_install_hint() {
-  echo ""
-  warn "============================================"
-  warn "  自动安装均失败,请手动下载安装:"
-  warn "============================================"
-  echo ""
-  echo "  1. 进入容器:   docker compose exec dev bash"
-  echo ""
-  echo "  2. 下载二进制:"
-  echo "     wget https://dev.mysql.com/get/Downloads/MySQL-8.4/mysql-${MYSQL_VERSION}-linux-glibc2.28-x86_64.tar.xz"
-  echo ""
-  echo "  3. 解压并复制:"
-  echo "     tar -xf mysql-${MYSQL_VERSION}-linux-glibc2.28-x86_64.tar.xz \\"
-  echo "       --strip-components 1 -C /usr/local/bin \\"
-  echo "       mysql-${MYSQL_VERSION}-linux-glibc2.28-x86_64/bin/mysql \\"
-  echo "       mysql-${MYSQL_VERSION}-linux-glibc2.28-x86_64/bin/mysqladmin"
-  echo ""
-  echo "  4. 验证:"
-  echo "     mysql --version"
-  echo "     # 应输出: mysql  Ver 8.4.4 for Linux on x86_64 ..."
-  echo ""
-  echo "  5. 连接测试:"
-  echo "     mysql -h mysql -P 3306 -u root -proot --ssl-mode=DISABLED"
-  echo ""
+	echo ""
+	warn "============================================"
+	warn "  自动安装均失败,请手动下载安装:"
+	warn "============================================"
+	echo ""
+	echo "  1. 进入容器:   docker compose exec dev bash"
+	echo ""
+	echo "  2. 下载二进制:"
+	echo "     wget https://dev.mysql.com/get/Downloads/MySQL-8.4/mysql-${MYSQL_VERSION}-linux-glibc2.28-x86_64.tar.xz"
+	echo ""
+	echo "  3. 解压并复制:"
+	echo "     tar -xf mysql-${MYSQL_VERSION}-linux-glibc2.28-x86_64.tar.xz \\"
+	echo "       --strip-components 1 -C /usr/local/bin \\"
+	echo "       mysql-${MYSQL_VERSION}-linux-glibc2.28-x86_64/bin/mysql \\"
+	echo "       mysql-${MYSQL_VERSION}-linux-glibc2.28-x86_64/bin/mysqladmin"
+	echo ""
+	echo "  4. 验证:"
+	echo "     mysql --version"
+	echo "     # 应输出: mysql  Ver 8.4.4 for Linux on x86_64 ..."
+	echo ""
+	echo "  5. 连接测试:"
+	echo "     mysql -h mysql -P 3306 -u root -proot --ssl-mode=DISABLED"
+	echo ""
 }
 
 # ==========================================
@@ -290,41 +290,41 @@ echo ""
 
 # 步骤 1:检查是否已安装正确的版本
 if check_mysql_client; then
-  exit 0
+	exit 0
 fi
 
 # 步骤 2:清理旧版 MariaDB 客户端(确保后续 mysql 命令走新版本)
 if dpkg -l mariadb-client 2>/dev/null | grep -q "^ii"; then
-  info "移除旧版 MariaDB 客户端..."
-  apt-get remove -y -qq mariadb-client mariadb-client-core 2>/dev/null || true
+	info "移除旧版 MariaDB 客户端..."
+	apt-get remove -y -qq mariadb-client mariadb-client-core 2>/dev/null || true
 fi
 
 # 步骤 3:优先从官方 APT 仓库安装
 if install_from_apt; then
-  info "✅ 方式一成功:从 APT 仓库安装"
+	info "✅ 方式一成功:从 APT 仓库安装"
 else
-  warn "方式一失败,尝试方式二(二进制下载)..."
-  if install_from_binary; then
-    info "✅ 方式二成功:从二进制下载安装"
-  else
-    error "❌ 所有安装方案均失败"
-    manual_install_hint
-    exit 1
-  fi
+	warn "方式一失败,尝试方式二(二进制下载)..."
+	if install_from_binary; then
+		info "✅ 方式二成功:从二进制下载安装"
+	else
+		error "❌ 所有安装方案均失败"
+		manual_install_hint
+		exit 1
+	fi
 fi
 
 # 步骤 4:最终验证
 echo ""
 if command -v mysql >/dev/null 2>&1; then
-  mysql_ver=$(mysql --version)
-  info "✅ MySQL 客户端已就绪"
-  info "📊 版本: $mysql_ver"
-  echo ""
-  echo "📋 使用说明:"
-  echo "   连接命令: mysql -h <主机> -P <端口> -u <用户> -p<密码> --ssl-mode=DISABLED"
-  echo "   Docker 内连接: mysql -h mysql -P 3306 -u root -proot --ssl-mode=DISABLED"
-  echo ""
+	mysql_ver=$(mysql --version)
+	info "✅ MySQL 客户端已就绪"
+	info "📊 版本: $mysql_ver"
+	echo ""
+	echo "📋 使用说明:"
+	echo "   连接命令: mysql -h <主机> -P <端口> -u <用户> -p<密码> --ssl-mode=DISABLED"
+	echo "   Docker 内连接: mysql -h mysql -P 3306 -u root -proot --ssl-mode=DISABLED"
+	echo ""
 else
-  error "❌ MySQL 客户端安装失败(未知错误)"
-  exit 1
+	error "❌ MySQL 客户端安装失败(未知错误)"
+	exit 1
 fi

+ 16 - 16
setup-pi.sh

@@ -8,22 +8,22 @@ source /root/.bashrc
 
 # 检查 pi 是否已安装
 if command -v pi >/dev/null 2>&1; then
-    echo "✅ pi 已安装"
+	echo "✅ pi 已安装"
 else
-    echo "📥 开始安装 pi ..."
+	echo "📥 开始安装 pi ..."
 
-    # 安装 pi
-    echo "📦 正在安装 pi ..."
-    if ! bun add -g --ignore-scripts @earendil-works/pi-coding-agent; then
-        echo "❌ pi 安装失败"
-        exit 1
-    fi
+	# 安装 pi
+	echo "📦 正在安装 pi ..."
+	if ! bun add -g --ignore-scripts @earendil-works/pi-coding-agent; then
+		echo "❌ pi 安装失败"
+		exit 1
+	fi
 
-    # 验证 pi 安装是否成功
-    if command -v pi >/dev/null 2>&1; then
-        echo "✅ pi 安装成功"
-    else
-        echo "❌ pi 安装失败"
-        exit 1
-    fi
-fi
+	# 验证 pi 安装是否成功
+	if command -v pi >/dev/null 2>&1; then
+		echo "✅ pi 安装成功"
+	else
+		echo "❌ pi 安装失败"
+		exit 1
+	fi
+fi

+ 74 - 74
setup-pnpm.sh

@@ -4,99 +4,99 @@
 # 检查 nvm 是否已安装(通过检查 nvm.sh 文件是否存在)
 echo ""
 if [ -f "$HOME/.nvm/nvm.sh" ]; then
-    echo "✅ nvm 已安装"
-    # 加载 nvm 环境变量
-    \. "$HOME/.nvm/nvm.sh"
-    # 验证 nvm 是否可用
-    if type nvm >/dev/null 2>&1; then
-        echo "📊 版本:$(nvm --version)"
-    else
-        echo "⚠️ nvm 文件存在但无法加载"
-    fi
+	echo "✅ nvm 已安装"
+	# 加载 nvm 环境变量
+	\. "$HOME/.nvm/nvm.sh"
+	# 验证 nvm 是否可用
+	if type nvm >/dev/null 2>&1; then
+		echo "📊 版本:$(nvm --version)"
+	else
+		echo "⚠️ nvm 文件存在但无法加载"
+	fi
 else
-    echo "📥 开始安装 nvm..."
-    # 下载并安装 nvm
-    if ! curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash; then
-        echo "❌ nvm 下载失败"
-        exit 1
-    fi
+	echo "📥 开始安装 nvm..."
+	# 下载并安装 nvm
+	if ! curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash; then
+		echo "❌ nvm 下载失败"
+		exit 1
+	fi
 
-    # 加载 nvm 环境变量
-    if [ -f "$HOME/.nvm/nvm.sh" ]; then
-        \. "$HOME/.nvm/nvm.sh"
-    else
-        echo "❌ nvm 安装文件未找到"
-        exit 1
-    fi
+	# 加载 nvm 环境变量
+	if [ -f "$HOME/.nvm/nvm.sh" ]; then
+		\. "$HOME/.nvm/nvm.sh"
+	else
+		echo "❌ nvm 安装文件未找到"
+		exit 1
+	fi
 
-    # 验证 nvm 安装是否成功
-    if type nvm >/dev/null 2>&1; then
-        echo "✅ nvm 安装成功"
-        echo "📊 版本:$(nvm --version)"
-    else
-        echo "❌ nvm 安装失败"
-        exit 1
-    fi
+	# 验证 nvm 安装是否成功
+	if type nvm >/dev/null 2>&1; then
+		echo "✅ nvm 安装成功"
+		echo "📊 版本:$(nvm --version)"
+	else
+		echo "❌ nvm 安装失败"
+		exit 1
+	fi
 fi
 echo ""
 
 echo ""
 # 下载并安装 Node.js:
 if command -v node >/dev/null 2>&1; then
-    echo "✅ Node.js 已安装"
-    echo "📊 版本:$(node --version)"
+	echo "✅ Node.js 已安装"
+	echo "📊 版本:$(node --version)"
 else
-    echo "📥 开始安装 Node.js..."
-    # 使用 nvm 安装 Node.js
-    if ! nvm install 24; then
-        echo "❌ Node.js 安装失败"
-        exit 1
-    fi
+	echo "📥 开始安装 Node.js..."
+	# 使用 nvm 安装 Node.js
+	if ! nvm install 24; then
+		echo "❌ Node.js 安装失败"
+		exit 1
+	fi
 
-    # 设置默认 Node.js 版本
-    if ! nvm use 24; then
-        echo "❌ 设置 Node.js 版本失败"
-        exit 1
-    fi
+	# 设置默认 Node.js 版本
+	if ! nvm use 24; then
+		echo "❌ 设置 Node.js 版本失败"
+		exit 1
+	fi
 
-    # 验证 Node.js 安装是否成功
-    if command -v node >/dev/null 2>&1; then
-        echo "✅ Node.js 安装成功"
-    echo "📊 版本:$(node --version)"
-    else
-        echo "❌ Node.js 安装失败"
-        exit 1
-    fi
+	# 验证 Node.js 安装是否成功
+	if command -v node >/dev/null 2>&1; then
+		echo "✅ Node.js 安装成功"
+		echo "📊 版本:$(node --version)"
+	else
+		echo "❌ Node.js 安装失败"
+		exit 1
+	fi
 fi
 echo ""
 
 echo ""
 # 下载并安装 pnpm:
 if command -v pnpm >/dev/null 2>&1; then
-    echo "✅ pnpm 已安装"
-    echo "📊 版本:$(pnpm --version)"
+	echo "✅ pnpm 已安装"
+	echo "📊 版本:$(pnpm --version)"
 else
-    echo "📥 开始安装 pnpm..."
-    # 方式一:使用 corepack 启用 pnpm(Node.js 内置方式)
-    export COREPACK_ENABLE_DOWNLOAD_PROMPT=0;
-    if corepack enable pnpm 2>/dev/null; then
-        echo "✅ corepack 方式安装成功"
-    else
-        echo "⚠️  corepack 方式失败(Node.js TLS 兼容性问题),回退到 npm 安装..."
-        # 方式二:使用 npm 安装(npm 使用独立的 HTTP 栈,更稳定)
-        if ! npm install -g --force pnpm; then
-            echo "❌ pnpm 安装失败(corepack 和 npm 方式均失败)"
-            exit 1
-        fi
-    fi
+	echo "📥 开始安装 pnpm..."
+	# 方式一:使用 corepack 启用 pnpm(Node.js 内置方式)
+	export COREPACK_ENABLE_DOWNLOAD_PROMPT=0
+	if corepack enable pnpm 2>/dev/null; then
+		echo "✅ corepack 方式安装成功"
+	else
+		echo "⚠️  corepack 方式失败(Node.js TLS 兼容性问题),回退到 npm 安装..."
+		# 方式二:使用 npm 安装(npm 使用独立的 HTTP 栈,更稳定)
+		if ! npm install -g --force pnpm; then
+			echo "❌ pnpm 安装失败(corepack 和 npm 方式均失败)"
+			exit 1
+		fi
+	fi
 
-    # 验证 pnpm 安装是否成功
-    if command -v pnpm >/dev/null 2>&1; then
-        echo "✅ pnpm 安装成功"
-        echo "📊 版本:$(pnpm --version)"
-    else
-        echo "❌ pnpm 安装失败"
-        exit 1
-    fi
+	# 验证 pnpm 安装是否成功
+	if command -v pnpm >/dev/null 2>&1; then
+		echo "✅ pnpm 安装成功"
+		echo "📊 版本:$(pnpm --version)"
+	else
+		echo "❌ pnpm 安装失败"
+		exit 1
+	fi
 fi
 echo ""

+ 3 - 3
setup-ssh.sh

@@ -8,8 +8,8 @@ set -euo pipefail
 # 环境变量: SSH_ROOT_PASSWORD(默认 root)
 # ============================================
 
-log_info()  { echo "[INFO]  $*"; }
-log_warn()  { echo "[WARN]  $*" >&2; }
+log_info() { echo "[INFO]  $*"; }
+log_warn() { echo "[WARN]  $*" >&2; }
 log_error() { echo "[ERROR] $*" >&2; }
 
 log_info "开始配置 SSH 服务..."
@@ -133,7 +133,7 @@ if [ -f "${SSH_CONFIG}" ]; then
 					if (content[i] != "") printf "%s", content[i]
 				}
 			}
-		' "${SSH_CONFIG}" > "${SSH_CONFIG}.tmp" && mv "${SSH_CONFIG}.tmp" "${SSH_CONFIG}"
+		' "${SSH_CONFIG}" >"${SSH_CONFIG}.tmp" && mv "${SSH_CONFIG}.tmp" "${SSH_CONFIG}"
 		chmod 600 "${SSH_CONFIG}"
 		log_info "已清理重复的 Host localhost 条目"
 	fi

+ 20 - 20
tool-cbm-quiet.sh

@@ -18,31 +18,31 @@ GREEN='\033[0;32m'
 YELLOW='\033[1;33m'
 NC='\033[0m'
 
-info()  { echo -e "${GREEN}[cbm]${NC} $1"; }
-warn()  { echo -e "${YELLOW}[cbm]${NC} $1"; }
+info() { echo -e "${GREEN}[cbm]${NC} $1"; }
+warn() { echo -e "${YELLOW}[cbm]${NC} $1"; }
 
 # ------------------------------------------
 # 1. 安装 codebase-memory-mcp(如未安装)
 # ------------------------------------------
 if [ ! -f "$DEFAULT_BIN" ] && [ ! -f "$REAL_BIN" ]; then
-  info "正在安装 codebase-memory-mcp..."
-  curl -fsSL https://raw.githubusercontent.com/DeusData/codebase-memory-mcp/main/install.sh | bash
-  echo ""
+	info "正在安装 codebase-memory-mcp..."
+	curl -fsSL https://raw.githubusercontent.com/DeusData/codebase-memory-mcp/main/install.sh | bash
+	echo ""
 fi
 
 # ------------------------------------------
 # 2. 备份原始二进制
 # ------------------------------------------
 if [ -f "$DEFAULT_BIN" ] && [ ! -f "$REAL_BIN" ]; then
-  info "备份原始二进制 -> ${REAL_BIN}"
-  cp "$DEFAULT_BIN" "$REAL_BIN"
+	info "备份原始二进制 -> ${REAL_BIN}"
+	cp "$DEFAULT_BIN" "$REAL_BIN"
 fi
 
 # ------------------------------------------
 # 3. 创建独立 wrapper(不会被更新覆盖)
 # ------------------------------------------
 info "创建 stderr 重定向 wrapper -> ${WRAPPER}"
-cat > "$WRAPPER" << 'WRAPPER_EOF'
+cat >"$WRAPPER" <<'WRAPPER_EOF'
 #!/bin/bash
 # codebase-memory-mcp wrapper — redirect stderr to log file
 # This file is at a dedicated path and won't be overwritten by reinstall
@@ -55,8 +55,8 @@ chmod +x "$WRAPPER"
 # 4. 恢复原始二进制到默认路径(允许更新覆盖)
 # ------------------------------------------
 if [ -f "$REAL_BIN" ]; then
-  info "恢复原始二进制到默认路径"
-  cp "$REAL_BIN" "$DEFAULT_BIN"
+	info "恢复原始二进制到默认路径"
+	cp "$REAL_BIN" "$DEFAULT_BIN"
 fi
 
 # ------------------------------------------
@@ -66,22 +66,22 @@ ENV_VAR='CBM_MCP_BIN='"${WRAPPER}"
 
 # 写入 /etc/environment(需 root)
 if [ "$(id -u)" = "0" ]; then
-  if ! grep -q "CBM_MCP_BIN" /etc/environment 2>/dev/null; then
-    info "写入 /etc/environment(系统级)"
-    echo "$ENV_VAR" >> /etc/environment
-  else
-    warn "/etc/environment 已存在 CBM_MCP_BIN,跳过"
-  fi
+	if ! grep -q "CBM_MCP_BIN" /etc/environment 2>/dev/null; then
+		info "写入 /etc/environment(系统级)"
+		echo "$ENV_VAR" >>/etc/environment
+	else
+		warn "/etc/environment 已存在 CBM_MCP_BIN,跳过"
+	fi
 else
-  warn "非 root 用户,跳过 /etc/environment"
+	warn "非 root 用户,跳过 /etc/environment"
 fi
 
 # 写入 ~/.bashrc(用户级,兜底)
 if ! grep -q "CBM_MCP_BIN" "${HOME}/.bashrc" 2>/dev/null; then
-  info "写入 ~/.bashrc"
-  echo "export ${ENV_VAR}" >> "${HOME}/.bashrc"
+	info "写入 ~/.bashrc"
+	echo "export ${ENV_VAR}" >>"${HOME}/.bashrc"
 else
-  warn "~/.bashrc 已存在 CBM_MCP_BIN,跳过"
+	warn "~/.bashrc 已存在 CBM_MCP_BIN,跳过"
 fi
 
 # ------------------------------------------

+ 1 - 1
tool-import-sql.sh

@@ -163,4 +163,4 @@ echo "   查看表详情: DESCRIBE table_name;"
 echo ""
 echo "数据库初始化完成"
 echo ""
-echo ""
+echo ""

+ 10 - 10
tool-trunk-checker.sh

@@ -100,9 +100,9 @@ cd /workspace || exit
 
 # 解析 trunk 二进制(优先级:TRUNK_BIN 环境变量 > /workspace/trunk > PATH 中的 trunk)
 resolve_trunk() {
-	if [ -n "${TRUNK_BIN:-}" ] && [ -x "$TRUNK_BIN" ]; then
-		printf '%s\n' "$TRUNK_BIN"
-	elif [ -x /workspace/trunk ]; then
+	if [[ -n ${TRUNK_BIN-} ]] && [[ -x ${TRUNK_BIN} ]]; then
+		printf '%s\n' "${TRUNK_BIN}"
+	elif [[ -x /workspace/trunk ]]; then
 		printf '%s\n' /workspace/trunk
 	elif command -v trunk >/dev/null 2>&1; then
 		command -v trunk
@@ -111,7 +111,7 @@ resolve_trunk() {
 	fi
 }
 TRUNK_BIN="$(resolve_trunk)"
-if [ -z "$TRUNK_BIN" ]; then
+if [[ -z ${TRUNK_BIN} ]]; then
 	echo "❌ trunk工具未找到,请设置 TRUNK_BIN 或安装 trunk"
 	exit 1
 fi
@@ -185,18 +185,18 @@ echo "${ALL_FILES}"
 echo ""
 
 # 确定目标所在的 git 仓库根并切换(子模块是独立 git 仓库,需在各自仓库根运行 trunk)
-if [ -n "$ALL_FILES" ]; then
-	FIRST_FILE="$(printf '%s\n' "$ALL_FILES" | head -n 1)"
-	REPO_ROOT="$(git -C "$(dirname "$FIRST_FILE")" rev-parse --show-toplevel 2>/dev/null || echo /workspace)"
+if [[ -n ${ALL_FILES} ]]; then
+	FIRST_FILE="$(printf '%s\n' "${ALL_FILES}" | head -n 1)"
+	REPO_ROOT="$(git -C "$(dirname "${FIRST_FILE}")" rev-parse --show-toplevel 2>/dev/null || echo /workspace)"
 else
 	REPO_ROOT="/workspace"
 fi
-cd "$REPO_ROOT" || exit
+cd "${REPO_ROOT}" || exit
 
 # 运行trunk check检查代码质量(已禁用安全扫描类工具,仅纯代码质量/格式检查)
 echo ""
 echo "🔍 正在运行代码质量检查..."
-if ! "$TRUNK_BIN" check ${ALL_FILES}; then
+if ! "${TRUNK_BIN}" check ${ALL_FILES}; then
 	echo ""
 	echo "❌ 代码质量检查失败!"
 	echo ""
@@ -210,4 +210,4 @@ echo "✅ 代码质量检查通过!可以安全提交。"
 echo "========================================"
 echo ""
 
-exit 0
+exit 0