#!/bin/bash # ============================================================================ # 文件名: hybrid_loader_template.sh # 描述: 混合模式加载器模板 - 自动选择本地或远程库 # 作者: Cloud Tools Project # 版本: 1.0.0 # ============================================================================ set -euo pipefail # 远程仓库 URL readonly REMOTE_BASE_URL="${REMOTE_LIB_URL:-https://gitea.bcde.io/wangdefa/tools/raw/branch/main}" # 获取脚本目录 readonly SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" readonly PROJECT_ROOT="$(dirname "$SCRIPT_DIR")" # # 智能加载公共库 # # 尝试顺序: # 1. 如果设置了 FORCE_REMOTE=1,强制使用远程 # 2. 尝试加载本地库 # 3. 如果本地库不存在,自动使用远程 # load_common_libs() { local use_remote=false # 检查是否强制使用远程 if [[ "${FORCE_REMOTE:-0}" == "1" ]]; then echo "[INFO] 强制使用远程库 (FORCE_REMOTE=1)" use_remote=true # 检查本地库是否存在 elif [[ -f "${PROJECT_ROOT}/common/logging.sh" ]] && [[ -f "${PROJECT_ROOT}/common/error_handler.sh" ]]; then echo "[INFO] 使用本地公共库" # shellcheck disable=SC1091 source "${PROJECT_ROOT}/common/logging.sh" # shellcheck disable=SC1091 source "${PROJECT_ROOT}/common/error_handler.sh" return 0 else echo "[WARN] 本地库不存在,使用远程库" use_remote=true fi # 使用远程库 if [[ "$use_remote" == "true" ]]; then if command -v curl &>/dev/null; then echo "[INFO] 使用 curl 下载远程库..." # shellcheck disable=SC1090 if source <(curl -fsSL "${REMOTE_BASE_URL}/common/remote_loader.sh" 2>/dev/null); then return 0 fi elif command -v wget &>/dev/null; then echo "[INFO] 使用 wget 下载远程库..." # shellcheck disable=SC1090 if source <(wget -qO- "${REMOTE_BASE_URL}/common/remote_loader.sh" 2>/dev/null); then return 0 fi fi echo "[ERROR] 无法加载公共库(本地不存在且远程下载失败)" >&2 echo "[ERROR] 请检查网络连接或安装 curl/wget" >&2 exit 1 fi } # 加载公共库 load_common_libs # # 主函数 # main() { log_info "============ 混合加载器示例 ============" log_info "使用混合模式的公共库" # 显示加载信息 if [[ "${FORCE_REMOTE:-0}" == "1" ]]; then log_warning "当前使用远程库(强制模式)" elif [[ -f "${PROJECT_ROOT}/common/logging.sh" ]]; then log_success "当前使用本地库" else log_warning "当前使用远程库(自动回退)" fi # 测试功能 log_info "测试日志功能..." log_success "日志功能正常" log_info "测试错误处理..." if check_command "bash"; then log_success "命令检查功能正常" fi log_success "所有测试通过!" } # 执行主函数 main "$@"