#!/usr/bin/env sh # write-confirm.sh — Gitea 寫入前的人工確認。 # # 為什麼要有這支腳本:wiki 與議題都是對外寫入。先確認,才能避免把 # 錯頁、錯內容、錯標籤直接送出去。 # # 用法: # write-confirm.sh <動作> <目標> # # 規則: # - JSC_GITEA_CONFIRM=yes:直接放行。 # - JSC_GITEA_CONFIRM=no:直接拒絕。 # - 互動式執行:要求輸入「確認」。 # - 沒有互動終端:拒絕,避免默默寫出錯資料。 set -eu action="${1:-}" target="${2:-}" [ -n "$action" ] || { echo '[jsc][Gitea][ERR]:缺少動作名稱。' >&2; exit 2; } [ -n "$target" ] || { echo '[jsc][Gitea][ERR]:缺少目標名稱。' >&2; exit 2; } case "${JSC_GITEA_CONFIRM:-}" in yes|YES|1|true|TRUE) exit 0 ;; no|NO|0|false|FALSE) echo "[jsc][Gitea][ERR]:已取消寫入「$target」。" >&2 exit 2 ;; esac if [ -t 0 ]; then printf '[jsc][Gitea] 即將%s「%s」。輸入「確認」繼續:' "$action" "$target" >&2 IFS= read -r answer || exit 2 case "$answer" in 確認) exit 0 ;; *) echo "[jsc][Gitea][ERR]:已取消寫入「$target」。" >&2 exit 2 ;; esac fi echo "[jsc][Gitea][ERR]:寫入「$target」需要先確認;請改用互動式執行,或先設 JSC_GITEA_CONFIRM=yes。" >&2 exit 2