#!/usr/bin/env bash # 讀取 JSC 知識庫 wiki(唯讀)。第一次 clone 到快取,之後每次先 pull;連不上就用現有快取。 # 用法:wiki.sh toc | chapter | page <編號或關鍵字> | search <關鍵字> set -u REPO="${JSC_WIKI_URL:-https://gitea.jsc.idv.tw/jiantw83/jsc-marketplace.wiki.git}" DIR="${JSC_WIKI_CACHE:-${XDG_CACHE_HOME:-$HOME/.cache}/jsc-wiki}" sync() { if [ -d "$DIR/.git" ]; then timeout 20 git -C "$DIR" pull -q --ff-only 2>/dev/null || echo "(無法更新 wiki,使用本機快取)" >&2 else mkdir -p "$(dirname "$DIR")" timeout 60 git clone -q --depth 1 "$REPO" "$DIR" 2>/dev/null || { echo "無法取得 wiki:$REPO" >&2; exit 1; } fi } cmd="${1:-toc}"; shift || true sync cd "$DIR" || exit 1 case "$cmd" in toc) cat Home.md ;; chapter) n="${1:?請給章號 1-8}" cat "第${n}章-"*.md | sed -E "s/\]\([^)]*\)/]/" ;; page) q="${1:?請給頁面編號(例 2.3)或標題關鍵字}" f=$(ls | grep -E "^${q//./\\.}-" | head -1) [ -n "$f" ] || f=$(ls | grep -i -- "$q" | grep -v '^第' | head -1) [ -n "$f" ] || { echo "找不到頁面:$q" >&2; exit 1; } echo "## 頁面:${f%.md}"; echo; cat "$f" ;; search) q="${1:?請給關鍵字}" grep -rniI --include='*.md' -- "$q" . | grep -v '^./Home.md' | cut -c3-200 | head -40 ;; *) echo "未知指令:$cmd" >&2; exit 2 ;; esac