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:
@@ -77,7 +77,7 @@ load_common_libs
|
|||||||
readonly DEFAULT_NUMBER=1
|
readonly DEFAULT_NUMBER=1
|
||||||
readonly DEFAULT_SHAPE="VM.Standard.A1.Flex"
|
readonly DEFAULT_SHAPE="VM.Standard.A1.Flex"
|
||||||
readonly DEFAULT_SHAPE_CONFIG="1+6"
|
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_BOOT_VOLUME_SIZE=0
|
||||||
readonly DEFAULT_VPU=120
|
readonly DEFAULT_VPU=120
|
||||||
readonly DEFAULT_DOMAIN=0
|
readonly DEFAULT_DOMAIN=0
|
||||||
@@ -361,7 +361,7 @@ main() {
|
|||||||
local fifo
|
local fifo
|
||||||
fifo=$(mktemp -u)
|
fifo=$(mktemp -u)
|
||||||
mkfifo "$fifo"
|
mkfifo "$fifo"
|
||||||
trap 'rm -f "$fifo"' EXIT
|
trap "rm -f \"$fifo\"" EXIT
|
||||||
configure_network "$ocid" "$fifo" &
|
configure_network "$ocid" "$fifo" &
|
||||||
read subnet_id < "$fifo"
|
read subnet_id < "$fifo"
|
||||||
log_success "网络配置完成 (子网ID: $subnet_id)"
|
log_success "网络配置完成 (子网ID: $subnet_id)"
|
||||||
|
|||||||
Reference in New Issue
Block a user