From 7c763659423e77a054d2f81a056dd8e4e74f26bb Mon Sep 17 00:00:00 2001 From: FlipWind Date: Sun, 9 Aug 2026 00:26:42 +0800 Subject: [PATCH] fix: harden Unix scripts and Makefile --- Makefile | 14 +++++++------- scripts/build.sh | 16 +++++++++++++--- scripts/dev.sh | 16 +++++++++++++--- scripts/sync-items.sh | 6 +++--- 4 files changed, 36 insertions(+), 16 deletions(-) mode change 100644 => 100755 scripts/build.sh mode change 100644 => 100755 scripts/dev.sh mode change 100644 => 100755 scripts/sync-items.sh diff --git a/Makefile b/Makefile index 651b329..741bb61 100644 --- a/Makefile +++ b/Makefile @@ -21,13 +21,13 @@ else endif help: - @echo "SFCraft 文档" - @echo " make build 同步物品贴图并执行 hugo 构建" - @echo " make dev 同步物品贴图并启动 hugo 开发服务器" - @echo " make sync 仅同步物品贴图" - @echo " make help 显示本帮助" - @echo "" - @echo "可附加 hugo 参数: make dev HUGO_ARGS=\"--port 1314\"" + @echo SFCraft 文档 + @echo make build 同步物品贴图并执行 hugo 构建 + @echo make dev 同步物品贴图并启动 hugo 开发服务器 + @echo make sync 仅同步物品贴图 + @echo make help 显示本帮助 + @echo + @echo 可附加 hugo 参数: make dev HUGO_ARGS="--port 1314" sync: $(SYNC_CMD) diff --git a/scripts/build.sh b/scripts/build.sh old mode 100644 new mode 100755 index d1b6cad..1f62105 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -11,10 +11,20 @@ echo "[1/2] 同步物品贴图" "$DIR/sync-items.sh" if ! command -v hugo >/dev/null 2>&1; then - echo "[错误] 未找到 hugo, 请安装 Hugo 或将其加入 PATH。" >&2 - exit 1 + HUGO_BIN="" + if [ -n "${HUGO:-}" ] && [ -x "$HUGO" ]; then + HUGO_BIN="$HUGO" + elif [ -n "${LOCALAPPDATA:-}" ]; then + HUGO_BIN="$(find "$LOCALAPPDATA/Microsoft/WinGet/Packages" -maxdepth 3 -name hugo.exe 2>/dev/null | head -n 1)" + fi + if [ -z "$HUGO_BIN" ]; then + echo "[错误] 未找到 hugo, 请安装 Hugo、将其加入 PATH, 或设置环境变量 HUGO。" >&2 + exit 1 + fi +else + HUGO_BIN="$(command -v hugo)" fi echo echo "[2/2] hugo 构建" -exec hugo "$@" +exec "$HUGO_BIN" "$@" diff --git a/scripts/dev.sh b/scripts/dev.sh old mode 100644 new mode 100755 index 8f0a692..0635200 --- a/scripts/dev.sh +++ b/scripts/dev.sh @@ -28,10 +28,20 @@ else fi if ! command -v hugo >/dev/null 2>&1; then - echo "[错误] 未找到 hugo, 请安装 Hugo 或将其加入 PATH。" >&2 - exit 1 + HUGO_BIN="" + if [ -n "${HUGO:-}" ] && [ -x "$HUGO" ]; then + HUGO_BIN="$HUGO" + elif [ -n "${LOCALAPPDATA:-}" ]; then + HUGO_BIN="$(find "$LOCALAPPDATA/Microsoft/WinGet/Packages" -maxdepth 3 -name hugo.exe 2>/dev/null | head -n 1)" + fi + if [ -z "$HUGO_BIN" ]; then + echo "[错误] 未找到 hugo, 请安装 Hugo、将其加入 PATH, 或设置环境变量 HUGO。" >&2 + exit 1 + fi +else + HUGO_BIN="$(command -v hugo)" fi echo echo "[2/2] 启动 hugo server" -exec hugo server "${HUGO_ARGS[@]}" +exec "$HUGO_BIN" server "${HUGO_ARGS[@]}" diff --git a/scripts/sync-items.sh b/scripts/sync-items.sh old mode 100644 new mode 100755 index f8e0800..995faf0 --- a/scripts/sync-items.sh +++ b/scripts/sync-items.sh @@ -6,12 +6,12 @@ set -euo pipefail DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PY="" -if command -v python3 >/dev/null 2>&1; then +if command -v python3 >/dev/null 2>&1 && python3 -c "import sys" >/dev/null 2>&1; then PY="python3" -elif command -v python >/dev/null 2>&1; then +elif command -v python >/dev/null 2>&1 && python -c "import sys" >/dev/null 2>&1; then PY="python" else - echo "[错误] 未找到 python3 / python, 请先安装 Python 3。" >&2 + echo "[错误] 未找到可用的 python3 / python, 请先安装 Python 3。" >&2 exit 1 fi