重构包安装脚本,提取公共函数,使用关联数组优化配置

This commit is contained in:
2026-04-02 16:41:49 +08:00
parent c5cc702462
commit 502f707d62

View File

@@ -6,43 +6,62 @@ set -euo pipefail
# - 不使用 chezmoi 的 .tmpl 模板语法;通过运行时检测 apt/pacman/dnf。 # - 不使用 chezmoi 的 .tmpl 模板语法;通过运行时检测 apt/pacman/dnf。
# - 脚本尽量保持幂等(包已安装会自动跳过)。 # - 脚本尽量保持幂等(包已安装会自动跳过)。
SUDO="" # 包管理器配置
if [ "$(id -u)" -ne 0 ]; then PACKAGE_LIST="zoxide exa bat fd fd-find ripgrep btop tldr fzf git vim tmux fish fastfetch thefuck"
if command -v sudo >/dev/null 2>&1; then declare -A UPDATE_COMMAND
SUDO="sudo" declare -A INSTALL_COMMAND
else UPDATE_COMMAND=(
echo "需要 sudo 权限才能安装包(当前非 root且找不到 sudo。" >&2 [pacman]="pacman -Syu --noconfirm"
exit 1 [apt]="apt update -y || true"
fi [dnf]="dnf makecache -y || true"
fi )
INSTALL_COMMAND=(
[pacman]="pacman -S --noconfirm"
[apt]="apt install -y"
[dnf]="dnf install -y"
)
# 检查 sudo 权限(假设普通用户运行)
if ! command -v sudo >/dev/null 2>&1; then
echo "需要 sudo 权限才能安装包。" >&2
exit 1
fi
SUDO="sudo"
# 安装单个包函数
install_package() {
local install_cmd="$1"
local package="$2"
if $SUDO $install_cmd "$package" >/dev/null 2>&1; then
echo "安装 $package: ✓ 成功"
else
echo "安装 $package: ✗ 跳过"
fi
}
# 安装包函数
install_packages() {
local package_manager="$1"
echo "检测到 $package_manager,开始安装包..."
echo "更新包..."
$SUDO ${UPDATE_COMMAND[$package_manager]}
echo "开始安装包..."
for package in $PACKAGE_LIST; do
install_package "${INSTALL_COMMAND[$package_manager]}" "$package"
done
echo "$package_manager 包安装完成!"
}
# 主逻辑:检测包管理器并安装
if command -v pacman >/dev/null 2>&1; then if command -v pacman >/dev/null 2>&1; then
echo "检测到 pacman开始安装 Arch/Manjaro 包..." install_packages "pacman"
echo "更新系统包..."
$SUDO pacman -Syu --noconfirm
echo "安装 Bash 常用命令增强/替代工具..."
$SUDO pacman -S --noconfirm zoxide exa bat fd ripgrep btop tldr fzf
echo "安装其他常用工具..."
$SUDO pacman -S --noconfirm git vim tmux fish fastfetch thefuck
echo "Arch/Manjaro 包安装完成!"
elif command -v apt >/dev/null 2>&1; then elif command -v apt >/dev/null 2>&1; then
echo "检测到 apt开始安装 Debian/Ubuntu 包..." install_packages "apt"
echo "更新包索引..."
$SUDO apt update -y || true
echo "安装 Bash 常用命令增强/替代工具..."
$SUDO apt install -y zoxide exa bat fd-find ripgrep btop tldr fzf
echo "安装其他常用工具..."
$SUDO apt install -y git vim tmux fish fastfetch thefuck
echo "Debian/Ubuntu 包安装完成!"
elif command -v dnf >/dev/null 2>&1; then elif command -v dnf >/dev/null 2>&1; then
echo "检测到 dnf开始安装 Fedora 包..." install_packages "dnf"
echo "更新包元数据..."
$SUDO dnf makecache -y || true
echo "安装 Bash 常用命令增强/替代工具..."
$SUDO dnf install -y zoxide exa bat fd-find ripgrep btop tldr fzf
echo "安装其他常用工具..."
$SUDO dnf install -y git vim tmux fish fastfetch thefuck
echo "Fedora 包安装完成!"
else else
echo "未检测到 apt / pacman / dnf跳过安装。" >&2 echo "未检测到 apt / pacman / dnf跳过安装。" >&2
fi fi