#!/bin/bash # 部署后核验(记忆里的「部署后核验六项」)。 # # ⛔ 为什么是 bash 而不是 node:rsh.sh 依赖 SSH_ASKPASS + SSH_ASKPASS_REQUIRE=force, # 必须经 shell 启动。2026-10-05 先写 Node 版,用 execFileSync('bash', …) 在 # Windows 上报 `spawnSync bash EBUSY` —— 11 项全红且看不出真机到底怎么了。 # 教训:**跨 Windows/SSH 的调用交给 shell,别在 Node 里 spawn bash**。 # # 用法:bash devtools/verify-deploy.sh set -u HERE="$(cd "$(dirname "$0")" && pwd)" ROOT="$(dirname "$HERE")" RSH="$HERE/rsh.sh" fails=0; n=0 ck() { # ck <名称> <条件结果0/1> [详情] n=$((n + 1)) if [ "$2" = "0" ]; then printf ' ok %s\n' "$1" else fails=$((fails + 1)) printf ' FAIL %s %s\n' "$1" "${3:-}" fi } echo "=== 部署后核验 ===" echo "" # ---- 1) 本地与真机 sha256 一致(确认测的是新代码)---- echo "--- 1. 文件一致性(sha256 前 16 位)---" for pair in "web/app.js:/opt/drouter/web/app.js" \ "web/i18n.js:/opt/drouter/web/i18n.js" \ "web/app.css:/opt/drouter/web/app.css" \ "backend/drouter-helper.py:/opt/drouter/backend/drouter-helper.py" \ "backend/drouter-web.py:/opt/drouter/backend/drouter-web.py"; do loc="${pair%%:*}"; rem="${pair##*:}" lh=$(sha256sum "$ROOT/$loc" 2>/dev/null | cut -c1-16) rh=$(bash "$RSH" "sha256sum $rem 2>/dev/null | cut -c1-16" 2>/dev/null | tr -d '\r' | head -1) if [ -n "$lh" ] && [ "$lh" = "$rh" ]; then ck "$loc" 0; else ck "$loc" 1 "本地=$lh 真机=$rh"; fi done # ---- 2) Web 服务可访问 + 版本注入 ---- echo "--- 2. Web 服务 ---" # ⚠️ 别截断:版本号注入在