fix: 修复 OCI 脚本中的 trap 变量作用域问题

## 问题描述

脚本执行完成后出现错误:
```
/dev/fd/63: line 1: fifo: unbound variable
```

## 根本原因

在 oci/create_instance.sh:364 行使用了:
```bash
trap 'rm -f "$fifo"' EXIT
```

单引号导致 `$fifo` 在 EXIT 时才展开,但此时 `fifo` 是 local 变量,
已超出作用域。由于 `set -u` 严格模式,访问未定义变量会报错。

## 修复方案

将单引号改为双引号:
```bash
trap "rm -f \"$fifo\"" EXIT
```

这样 `$fifo` 在 trap 设置时就会展开为实际的文件路径(如 /tmp/tmp.xxx),
trap 命令会记录具体路径而非变量名,避免作用域问题。

## 影响

-  修复 EXIT trap 的 unbound variable 错误
-  保持功能不变(临时 FIFO 文件仍会正确清理)
-  与 set -euo pipefail 严格模式兼容
This commit is contained in:
2025-12-26 15:09:49 +08:00
parent 71d487c59a
commit b0f1d5d600

View File

@@ -77,7 +77,7 @@ load_common_libs
readonly DEFAULT_NUMBER=1
readonly DEFAULT_SHAPE="VM.Standard.A1.Flex"
readonly DEFAULT_SHAPE_CONFIG="1+6"
readonly DEFAULT_IMAGE_NAME="Canonical-Ubuntu-20.04-aarch64-2025.05.20-0"
readonly DEFAULT_IMAGE_NAME="Canonical-Ubuntu-20.04-aarch64-2025.07.23-0"
readonly DEFAULT_BOOT_VOLUME_SIZE=0
readonly DEFAULT_VPU=120
readonly DEFAULT_DOMAIN=0
@@ -361,7 +361,7 @@ main() {
local fifo
fifo=$(mktemp -u)
mkfifo "$fifo"
trap 'rm -f "$fifo"' EXIT
trap "rm -f \"$fifo\"" EXIT
configure_network "$ocid" "$fifo" &
read subnet_id < "$fifo"
log_success "网络配置完成 (子网ID: $subnet_id)"