From a4554794fca128f571dd497e31cd3eeb6f75cdf9 Mon Sep 17 00:00:00 2001 From: shy3130 <415333856@qq.com> Date: Mon, 24 Aug 2026 14:21:27 +0800 Subject: [PATCH] =?UTF-8?q?fix(dev):=20macOS=20=E4=B8=8B=20dev.sh=20?= =?UTF-8?q?=E5=90=AF=E5=8A=A8=E5=A4=B1=E8=B4=A5=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - bash 3.2 空数组在 set -u 下展开报 unbound variable, 加 ${arr[@]+...} 守卫 - 全局 /usr/local/bin/uvicorn (Xcode python3.9) 劫持 venv, 改用 python -m uvicorn --- dev.sh | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/dev.sh b/dev.sh index 3a08a02..c7e2f86 100755 --- a/dev.sh +++ b/dev.sh @@ -127,7 +127,9 @@ if [ ! -d "$BACKEND_DIR/.venv" ] || [ "${#BACKEND_EXTRA_ARGS[@]}" -gt 0 ]; then else info "后端首次启动 — 安装 Python 依赖(约 1-2 分钟)..." fi - ( cd "$BACKEND_DIR" && uv sync --frozen "${BACKEND_EXTRA_ARGS[@]}" ) + # macOS 自带 bash 3.2 在 set -u 下展开空数组会报 unbound variable, + # ${arr[@]+"${arr[@]}"} 守卫:数组为空时展开为零个参数,非空时逐个带引号展开。 + ( cd "$BACKEND_DIR" && uv sync --frozen ${BACKEND_EXTRA_ARGS[@]+"${BACKEND_EXTRA_ARGS[@]}"} ) ok "后端依赖装好了" fi @@ -175,7 +177,9 @@ echo cd "$BACKEND_DIR" # --no-sync: 跳过依赖解析, 直接用已安装的 .venv。 # 比 --frozen 更彻底: 不校验 lockfile, 避免镜像源 403/网络抖动导致后端起不来。 - uv run --no-sync uvicorn app.main:app "${UVICORN_ENV_ARGS[@]}" --reload \ + # python -m uvicorn: 强制用 venv 的解释器和 uvicorn 模块, 防止 PATH 里 + # 其他 Python(如 /usr/local/bin/uvicorn) 抢先, 导致用错误版本启动后端。 + uv run --no-sync python -m uvicorn app.main:app ${UVICORN_ENV_ARGS[@]+"${UVICORN_ENV_ARGS[@]}"} --reload \ --host "$BACKEND_HOST" --port "$BACKEND_PORT" 2>&1 \ | prefix_awk "$(printf "${BLUE}[backend ]${NC} ")" ) &