#!/bin/bash # # install.sh - Gitea 交互式下载器一键安装脚本 # # 这个脚本会自动下载、安装并配置 gitea.sh,使其成为一个系统级的命令 'gitea'。 # --- 配置 --- DOWNLOAD_URL="https://git.zyj.best/theshy/gitea-downloader/raw/branch/main/gitea.sh" INSTALL_DIR="/usr/local/bin" INSTALL_NAME="gitea" TARGET_PATH="${INSTALL_DIR}/${INSTALL_NAME}" # --- 辅助函数 --- _print() { local color_code="$1"; shift if [ -t 1 ]; then printf "\e[${color_code}m%s\e[0m\n" "$@"; else printf "%s\n" "$@"; fi } info() { _print "34" "$@"; } success() { _print "32" "$@"; } error() { >&2 _print "31" "$@"; } warning() { _print "33" "$@"; } # --- 主逻辑 --- main() { # 1. 权限检查 local SUDO_CMD="" if [[ $EUID -ne 0 ]]; then if ! command -v sudo &> /dev/null; then error "错误: 本脚本需要 root 权限来安装文件到 ${INSTALL_DIR}。" error "请以 root 用户身份运行,或安装 'sudo' 后重试。" exit 1 fi SUDO_CMD="sudo" fi info "权限检查通过。将使用 '${SUDO_CMD}' 来执行需要提升权限的命令。" # 2. 依赖检查 if ! command -v curl &> /dev/null; then error "错误: 核心依赖 'curl' 未找到。请先安装 curl 后再运行此脚本。" warning " - Debian/Ubuntu: sudo apt-get install curl" exit 1 fi # 3. 检查是否已安装 if [ -f "$TARGET_PATH" ]; then warning "检测到 '${TARGET_PATH}' 已存在。" read -r -p "是否要覆盖它? [y/N] " choice case "$choice" in y|Y ) info "好的,将覆盖现有版本。" ;; * ) error "操作取消。" exit 1 ;; esac fi # 4. 下载主脚本到临时文件 info "\n步骤 1/3: 正在从您的 Gitea 仓库下载主脚本..." local TEMP_FILE TEMP_FILE=$(mktemp) curl -L --fail -o "$TEMP_FILE" "$DOWNLOAD_URL" || { error "\n下载失败!" error "请检查 URL 是否正确,以及网络连接是否正常。" error "URL: ${DOWNLOAD_URL}" rm -f "$TEMP_FILE" exit 1 } success "主脚本下载成功!" # 5. 安装脚本 info "\n步骤 2/3: 正在安装脚本到 ${TARGET_PATH}..." # 赋予执行权限 chmod +x "$TEMP_FILE" # 移动到系统路径 $SUDO_CMD mv "$TEMP_FILE" "$TARGET_PATH" || { error "\n无法将脚本移动到 ${TARGET_PATH}。" error "请检查您是否有足够的权限。" rm -f "$TEMP_FILE" exit 1 } success "脚本安装成功!" # 6. 最终提示 info "\n步骤 3/3: 完成!" success "\n祝贺您!Gitea 交互式下载器已成功安装。" info "您现在可以在系统的任何位置使用 'gitea' 命令了。" warning "\n下一步操作:" warning " 1. 打开一个新的终端,或者运行 'source ~/.bashrc' (取决于您的 shell)。" warning " 2. 运行以下命令开始使用:" info " gitea down" warning " 3. 首次运行时,它会引导您完成 Gitea URL 和 Token 的配置。" warning " (它还会自动检查并提示安装 jq 和 fzf 等依赖)" } # --- 脚本入口 --- main