mirror of
https://gitcode.com/JianFeeeee/homeagent-sdk.git
synced 2026-10-01 14:53:12 +00:00
## 症状
按注释声称的「兼容」用法传新名,脚本立刻死:
HMAPDEV=... bash package/build-examples.sh linux/amd64 /tmp/out
→ package/build-examples.sh: line 72: PLUGINDEV: unbound variable (exit 1)
而传旧名一切正常:
PLUGINDEV=... bash package/build-examples.sh linux/amd64 /tmp/out
→ 成功 20 / 失败 0
## 根因
第 71 行写的是:
HMAPDEV="${HMAPDEV:-${PLUGINDEV:-$SDK_ROOT/build/hmapdev}}"
这**只定义了 HMAPDEV**;PLUGINDEV 若未设置就仍是未定义变量。
而紧接着的 72/77/100 三行读的却是 `$PLUGINDEV`:
if [ ! -x "$PLUGINDEV" ]; then # ← 未定义 → set -u 下致命
out=$( cd "$dir" && "$PLUGINDEV" build ... )
于是只有当调用方**恰好传旧名**时 PLUGINDEV 才有值、才工作。
注释说「旧变量名 PLUGINDEV 仍兼容」——兼容的方向反了:是旧名恰好能跑,
新名不能。
## 为何一直没暴露
发版路径传的正是旧名(build.sh:92 `PLUGINDEV="$dev" ...`),
所以 release 流程一路是绿的。任何人按新名(或根本不传)调用都会撞上。
## 修法
三处改读 `$HMAPDEV`(第 71 行刚解析出的规范名)。
## 验证(三种调用方式都要能工作)
A) HMAPDEV=... → exit 0,20/20,20 个 .hmap(修复前 exit 1)
B) PLUGINDEV=... → exit 0,20/20(向后兼容保持)
C) 都不传 → 自动先构建 hmapdev,再 20/20
跨平台也验过:linux/arm64 20/20(19s)、darwin/amd64 20/20(21s);
windows 被有意拒绝并给出明确原因(协议 2 的统一共享内存区未移植)。