From d2a996df1bb2ecd47199db7aa5efd553882a5a4b Mon Sep 17 00:00:00 2001 From: sususu98 Date: Fri, 12 Dec 2025 13:51:33 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=87=AA=E5=8A=A8=E6=A3=80=E6=B5=8B?= =?UTF-8?q?=E5=B9=B6=E5=AE=89=E8=A3=85=E7=B3=BB=E7=BB=9F=E4=BE=9D=E8=B5=96?= =?UTF-8?q?=20(curl,=20unzip,=20jq)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加 get_sys_pkg_manager() 检测系统包管理器 (apt/yum/dnf/apk/brew/pacman) - 添加 install_sys_dep() 自动安装单个依赖 - 添加 check_system_deps() 检测并自动安装缺失的 curl, unzip, jq - 在 main() 开头调用依赖检测 - 简化 install_bun() 移除重复的 unzip 检测 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- setup.sh | 149 ++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 137 insertions(+), 12 deletions(-) diff --git a/setup.sh b/setup.sh index 19539b1..aa06157 100755 --- a/setup.sh +++ b/setup.sh @@ -83,6 +83,138 @@ get_tool_cmd() { eval echo \"\$TOOL_CMDS_$1\"; } get_tool_pkg() { eval echo \"\$TOOL_PKGS_$1\"; } get_tool_url() { eval echo \"\$TOOL_URLS_$1\"; } +# ========== 检测系统包管理器 ========== +get_sys_pkg_manager() { + if command_exists apt-get; then + echo "apt" + elif command_exists yum; then + echo "yum" + elif command_exists dnf; then + echo "dnf" + elif command_exists apk; then + echo "apk" + elif command_exists brew; then + echo "brew" + elif command_exists pacman; then + echo "pacman" + else + echo "" + fi +} + +# ========== 安装系统依赖 ========== +install_sys_dep() { + local dep=$1 + local pkg_mgr=$(get_sys_pkg_manager) + + if [[ -z "$pkg_mgr" ]]; then + error "无法检测系统包管理器,请手动安装 $dep" + return 1 + fi + + info "正在安装 $dep..." + + case "$pkg_mgr" in + apt) + apt-get update -qq && apt-get install -y "$dep" + ;; + yum) + yum install -y "$dep" + ;; + dnf) + dnf install -y "$dep" + ;; + apk) + apk add "$dep" + ;; + brew) + brew install "$dep" + ;; + pacman) + pacman -S --noconfirm "$dep" + ;; + esac + + if command_exists "$dep"; then + success "$dep 安装成功!" + return 0 + else + error "$dep 安装失败" + return 1 + fi +} + +# ========== 检测并安装系统依赖 ========== +check_system_deps() { + local missing_deps=() + + # 检测 curl + if ! command_exists curl; then + missing_deps+=("curl") + fi + + # 检测 unzip (bun 安装需要) + if ! command_exists unzip; then + missing_deps+=("unzip") + fi + + # 检测 jq (Claude Code 配置需要) + if ! command_exists jq; then + missing_deps+=("jq") + fi + + if [[ ${#missing_deps[@]} -eq 0 ]]; then + return 0 + fi + + echo "" + warning "检测到缺少以下系统依赖: ${missing_deps[*]}" + echo "" + + read -p "是否自动安装这些依赖? (Y/n) " -n 1 -r + echo "" + + if [[ $REPLY =~ ^[Nn]$ ]]; then + error "请手动安装依赖后重新运行脚本" + echo "" + local pkg_mgr=$(get_sys_pkg_manager) + case "$pkg_mgr" in + apt) + echo -e " ${CYAN}apt-get update && apt-get install -y ${missing_deps[*]}${NC}" + ;; + yum) + echo -e " ${CYAN}yum install -y ${missing_deps[*]}${NC}" + ;; + dnf) + echo -e " ${CYAN}dnf install -y ${missing_deps[*]}${NC}" + ;; + apk) + echo -e " ${CYAN}apk add ${missing_deps[*]}${NC}" + ;; + brew) + echo -e " ${CYAN}brew install ${missing_deps[*]}${NC}" + ;; + pacman) + echo -e " ${CYAN}pacman -S ${missing_deps[*]}${NC}" + ;; + *) + echo -e " 请使用系统包管理器安装: ${missing_deps[*]}" + ;; + esac + echo "" + return 1 + fi + + # 自动安装依赖 + for dep in "${missing_deps[@]}"; do + if ! install_sys_dep "$dep"; then + return 1 + fi + done + + return 0 +} + # ========== 帮助信息 ========== show_help() { cat << 'EOF' @@ -131,18 +263,6 @@ install_bun() { warning "未检测到 Node.js 或 Bun" info "推荐安装 Bun(轻量级 JavaScript 运行时)" echo "" - - # 检测 unzip 依赖 - if ! command_exists unzip; then - error "安装 Bun 需要 unzip,请先安装:" - echo "" - echo -e " Ubuntu/Debian: ${CYAN}sudo apt-get install unzip${NC}" - echo -e " Alpine: ${CYAN}apk add unzip${NC}" - echo -e " CentOS/RHEL: ${CYAN}sudo yum install unzip${NC}" - echo "" - return 1 - fi - echo -e " 安装命令: ${CYAN}curl -fsSL https://bun.sh/install | bash${NC}" echo "" @@ -281,6 +401,11 @@ main() { esac done + # 检测并安装系统依赖 (curl, unzip, jq) + if ! check_system_deps; then + exit 1 + fi + # 显示状态 show_status