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:
+11
-1
@@ -21,11 +21,18 @@
|
||||
# ============================================================
|
||||
set -euo pipefail
|
||||
# 失败时打印出错行号,避免只看到半截输出
|
||||
trap 'printf "\033[1;31m[install]\033[0m 第 %d 行执行失败(退出码 %d)\n" "$LINENO" "$?" >&2' ERR
|
||||
trap 'printf "\033[1;31m[install]\033[0m %s 第 %d 行执行失败(退出码 %d)\n" "${BASH_SOURCE[0]}" "$LINENO" "$?" >&2' ERR
|
||||
|
||||
SRC_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
cd "$SRC_DIR"
|
||||
|
||||
# .env 语法预检(deploy/env-lib.sh):.env 是被 shell 真正 source 的文件,
|
||||
# 未加引号且含空格的值会被当成命令执行,报错形如
|
||||
# ./deploy/.env: line 53: Miku.pmx: command not found
|
||||
# 载入前先查一遍,给出带行号与改法的中文提示。
|
||||
# shellcheck source=deploy/env-lib.sh
|
||||
. "$SRC_DIR/deploy/env-lib.sh"
|
||||
|
||||
APP_DIR="${APP_DIR:-/opt/opendance}"
|
||||
SERVICE_USER="${SERVICE_USER:-opendance}"
|
||||
STORAGE_DIR="${STORAGE_DIR:-/var/lib/opendance/storage}"
|
||||
@@ -125,6 +132,8 @@ if [ ! -f deploy/.env ]; then
|
||||
fi
|
||||
fi
|
||||
|
||||
opendance_validate_env_file "./deploy/.env" || die "deploy/.env 语法预检未通过(见上):按提示给对应行的值加上引号后重新执行。"
|
||||
|
||||
set -a
|
||||
# shellcheck disable=SC1091
|
||||
. ./deploy/.env
|
||||
@@ -320,6 +329,7 @@ fi
|
||||
|
||||
# ---------- 3. 数据库迁移 ----------
|
||||
log "执行 TypeORM 迁移(不使用 DB_SYNCHRONIZE)"
|
||||
opendance_validate_env_file "$APP_DIR/deploy/.env" || die "$APP_DIR/deploy/.env 语法预检未通过(见上)"
|
||||
set -a; . "$APP_DIR/deploy/.env"; set +a
|
||||
cd "$APP_DIR/web-server"
|
||||
as_service_user env \
|
||||
|
||||
Reference in New Issue
Block a user