fix(deploy): .env 中带空格的值未加引号导致 install.sh 以 127 失败

现象:
  ./deploy/.env: line 53: Miku.pmx: command not found
  [install] 第 53 行执行失败(退出码 127)

根因:deploy/.env.example 的 MODEL_CONVERT_PMX=Hatsune Miku.pmx 值含空格
却没加引号,install.sh 用 `set -a; . deploy/.env` 载入时被切成
「赋值 + 命令」,Miku.pmx 被当成命令执行。

修复:
1. 模板改为 MODEL_CONVERT_PMX="Hatsune Miku.pmx"(占位符值同样加引号);
2. 新增 deploy/env-lib.sh:.env 语法预检,install.sh / ctl.sh 在 source
   之前检查,报错给出「哪一行 / 原文 / 改法」, 与反引号建议单引号;
3. install.sh 的 ERR trap 补上出错文件名(lineno 属于被 source 的 .env,
   只报行号无法定位);
4. 新增 test/env-file.spec.ts 12 项回归测试,锁住「模板可被 shell 原样载入」;
5. 版本升到 0.2.1,README(.md/.txt)/DSH.md 补 .env 写法约定、FAQ 与测试数量。
This commit is contained in:
opendance
2026-09-15 22:26:58 +08:00
parent d6376ec5a5
commit ea58520fc2
14 changed files with 412 additions and 33 deletions
+8 -1
View File
@@ -13,6 +13,7 @@
# ============================================================
set -uo pipefail
SCRIPT_DIR="$(cd "$(dirname "$0")" 2>/dev/null && pwd)"
APP_DIR="${APP_DIR:-/opt/opendance}"
SERVICE_USER="${SERVICE_USER:-opendance}"
LOG_FILE="${LOG_FILE:-/var/log/opendance-api.log}"
@@ -95,8 +96,14 @@ start() {
return 0
fi
# 载入部署环境变量
# 载入部署环境变量(先做语法预检:.env 会被 shell 真的执行)
if [ -f "$APP_DIR/deploy/.env" ]; then
if [ -f "$SCRIPT_DIR/env-lib.sh" ]; then
# shellcheck source=deploy/env-lib.sh
. "$SCRIPT_DIR/env-lib.sh"
opendance_validate_env_file "$APP_DIR/deploy/.env" \
|| die "$APP_DIR/deploy/.env 语法预检未通过(见上):给对应行的值加上引号后重试。"
fi
set -a; . "$APP_DIR/deploy/.env"; set +a
else
die "缺少 $APP_DIR/deploy/.env"