檔頭只寫了用法與規則,沒有列結束碼,呼叫端無法逐碼分流,腳本檢查因此不通過。 依實作補上兩碼:0 表示已確認,可以送出寫入;2 表示不要寫入,並列出走這一碼的五種情形。 一併說明用法錯誤與人工拒絕為何共用 2。只加註解,指令行為與輸出都沒有變。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
51 lines
1.9 KiB
Bash
Executable File
51 lines
1.9 KiB
Bash
Executable File
#!/usr/bin/env sh
|
|
# write-confirm.sh — Gitea 寫入前的人工確認。
|
|
#
|
|
# 為什麼要有這支腳本:wiki 與議題都是對外寫入。先確認,才能避免把
|
|
# 錯頁、錯內容、錯標籤直接送出去。
|
|
#
|
|
# 用法:
|
|
# write-confirm.sh <動作> <目標>
|
|
#
|
|
# 規則:
|
|
# - JSC_GITEA_CONFIRM=yes:直接放行。
|
|
# - JSC_GITEA_CONFIRM=no:直接拒絕。
|
|
# - 互動式執行:要求輸入「確認」。
|
|
# - 沒有互動終端:拒絕,避免默默寫出錯資料。
|
|
# 結束碼: 0=已確認,呼叫端接著送出這次寫入。
|
|
# 2=不要寫入,原因印在 stderr:缺動作名稱、缺目標名稱、JSC_GITEA_CONFIRM=no、
|
|
# 輸入的不是「確認」、讀不到輸入,以及沒有互動終端這五種都走這一碼。
|
|
# 呼叫端一律中止這次寫入,不要重試,也不要繞過確認直接呼叫 API。
|
|
# 只有 0 與 2 兩種。用法錯誤與人工拒絕共用 2,因為兩者的處置一樣是「不寫」;
|
|
# 拆成兩碼只會誘使呼叫端把用法錯誤當成可重試,反而寫出沒經過確認的資料。
|
|
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
|