Commit Graph

2 Commits

Author SHA1 Message Date
1be07db276 fix: 避免 remote_loader.sh 中重复定义 readonly 变量
## 问题描述

当脚本使用远程加载时,出现警告:
```
/tmp/tmp.xxx: line 10: REMOTE_BASE_URL: readonly variable
```

## 根本原因

`REMOTE_BASE_URL` 被重复定义为 readonly 变量:

1. 调用脚本中定义(如 oci/create_instance.sh:16):
   ```bash
   readonly REMOTE_BASE_URL="..."
   ```

2. remote_loader.sh:10 中再次定义:
   ```bash
   readonly REMOTE_BASE_URL="..."
   ```

Bash 不允许重新赋值 readonly 变量,即使值相同也会产生警告。

## 修复方案

在 remote_loader.sh 中添加检查,只有在变量未定义时才设置:

```bash
# 旧代码
readonly REMOTE_BASE_URL="..."

# 新代码
if [[ -z "${REMOTE_BASE_URL:-}" ]]; then
    readonly REMOTE_BASE_URL="..."
fi
```

## 影响

-  消除警告信息
-  保持向后兼容
-  允许调用者自定义 REMOTE_BASE_URL
-  如果未定义则使用默认值
2025-12-26 15:23:48 +08:00
b34e1ef872 feat: 为所有脚本添加远程库加载支持
## 功能概述

实现了智能远程库加载机制,允许脚本从远程 Gitea 仓库动态下载公共库,
同时保留本地库优先的策略,确保脚本可以独立运行而不依赖本地项目结构。

## 变更内容

### 新增文件

- **common/remote_loader.sh**: 核心远程加载器
  - 支持 curl/wget 双重下载方式
  - 临时文件自动清理机制
  - 环境变量可配置仓库 URL

- **examples/remote_example.sh**: 纯远程模式示例
  - 演示完全独立的远程加载脚本
  - 适合单文件分发场景

- **examples/hybrid_loader_template.sh**: 混合模式模板
  - 本地优先 + 远程回退策略
  - 适合仓库内脚本

- **examples/REMOTE_LOADER_README.md**: 完整使用文档
  - 三种使用模式详解
  - 故障排除指南
  - 最佳实践建议

### 更新脚本(版本 2.1.0)

所有主要脚本均升级到 2.1.0 版本,支持智能库加载:

- **linux/create_raid0_array.sh**
- **linux/repartition_disks.sh**
- **linux/install_oh_my_zsh.sh**
- **gcp/create_ai_projects.sh**
- **gcp/delete_all_projects.sh**
- **oci/create_instance.sh**
- **common/demo_usage.sh**

## 加载策略

1. 检查 FORCE_REMOTE=1 环境变量 → 强制远程
2. 检查本地库存在性 → 优先使用本地
3. 本地不存在 → 自动回退远程
4. 远程失败 → 友好错误提示

## 使用示例

### 本地模式(默认)
```bash
./linux/create_raid0_array.sh
```

### 强制远程模式
```bash
FORCE_REMOTE=1 ./linux/create_raid0_array.sh
```

### 自定义仓库 URL
```bash
REMOTE_LIB_URL=https://example.com/repo ./script.sh
```

## 技术特性

-  向后兼容:默认使用本地库,行为不变
-  离线可用:本地库存在时无需网络
-  独立分发:支持单文件脚本分发
-  错误处理:详细的错误信息和诊断建议
-  环境可配:REMOTE_LIB_URL 和 FORCE_REMOTE
-  自动清理:临时文件通过 trap 自动删除
2025-12-26 15:00:06 +08:00