Private
Public Access
1
0

feat: 自动检测并安装系统依赖 (curl, unzip, jq)

- 添加 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 <noreply@anthropic.com>
This commit is contained in:
2025-12-12 13:51:33 +08:00
parent af49600718
commit d2a996df1b

149
setup.sh
View File

@@ -83,6 +83,138 @@ get_tool_cmd() { eval echo \"\$TOOL_CMDS_$1\"; }
get_tool_pkg() { eval echo \"\$TOOL_PKGS_$1\"; } get_tool_pkg() { eval echo \"\$TOOL_PKGS_$1\"; }
get_tool_url() { eval echo \"\$TOOL_URLS_$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() { show_help() {
cat << 'EOF' cat << 'EOF'
@@ -131,18 +263,6 @@ install_bun() {
warning "未检测到 Node.js 或 Bun" warning "未检测到 Node.js 或 Bun"
info "推荐安装 Bun轻量级 JavaScript 运行时)" info "推荐安装 Bun轻量级 JavaScript 运行时)"
echo "" 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 -e " 安装命令: ${CYAN}curl -fsSL https://bun.sh/install | bash${NC}"
echo "" echo ""
@@ -281,6 +401,11 @@ main() {
esac esac
done done
# 检测并安装系统依赖 (curl, unzip, jq)
if ! check_system_deps; then
exit 1
fi
# 显示状态 # 显示状态
show_status show_status