生活分享
Claude Code|跨平台 Hooks:中文路徑、逾時與遞迴排錯
把 Hook 做成可測試、可停用、可移植的工具。Hook 在作者的資料夾能跑,不代表移到中文路徑、另一個 shell 或不同作業系統也正常。本篇建立一張環境矩陣,檢查路徑、編碼、換行、逾時與重複事件,最後寫出能停止並恢復正常工作的操作手冊。
閱讀時間約 7 分鐘

進階 · CLI
Hook 在作者的資料夾能跑,不代表移到中文路徑、另一個 shell 或不同作業系統也正常。本篇建立一張環境矩陣,檢查路徑、編碼、換行、逾時與重複事件,最後寫出能停止並恢復正常工作的操作手冊。
先讀Hook 事件Claude Code|讀懂 Hook 事件:輸入、輸出與退出碼建立可重播事件的本機測試工具。Hook 教學最容易卡住的地方,常常不是腳本語法,而是沒有分清楚誰送入事件、腳本讀到什麼,以及輸出會由誰解讀。本篇建立一個能重播事件的小實驗室,先用固定 JSON 驗證腳本,再接到 Claude 的實際事件。最後你會有正常、拒絕、輸入錯誤及診斷訊息四種可辨認結果。閱讀全文、格式化Claude Code|只處理變更檔案的格式化 Hook限制格式化範圍並避免事件重複執行。格式化 Hook 如果每次都掃描整個專案,可能改到與任務無關的檔案。本篇只處理 Write 或 Edit 剛完成的 JSON 練習檔,檢查路徑、解析內容,再在有必要時寫回。你會用連續重播確認第二次不再產生變更,也會驗證失敗時原始資料仍保留。閱讀全文及品質檢查Claude Code|建立可停止的品質檢查 Hook讓完成檢查能指出失敗並有清楚的退出機制。測試沒有通過時,Claude 應知道工作還有問題;但如果 Hook 每次都阻止結束,又可能陷入不停重試。本篇建立有次數邊界的 Stop 檢查,第一次失敗回報原因,重複觸發時停止遞迴,並把尚未完成的結果清楚交回讀者。閱讀全文。下載第 78 篇材料,使用新解壓縮的 starter。需要 Node.js 22 以上;閱讀約 20 分鐘,實作約 45 分鐘。
先列出真正可用的環境
閱讀完整文字說明
跨平台 Hooks:中文路徑、逾時與遞迴排錯,以流程和文件圖形呈現教學重點。
矩陣至少包含作業系統、shell、Node、Claude 版本、專案路徑與測試方式。原生 Windows 的 PowerShell、WSL2 裡的 Linux 終端機和 macOS 是不同環境,不能只因為都執行 node 就合併成一列。沒有設備的項目保留待測,不需要填一個推測的通過。
本套材料在 Windows 的本機 Node 測試有實際紀錄;其他平台應由對應環境重跑,才能標為通過。Claude 的真實 Hook 觸發又是另一層,需要可登入帳號。純 Node 重播成功,不能取代產品整合或其他作業系統的操作證據。
node --version
claude --version
node -e "console.log(JSON.stringify({platform:process.platform,cwd:process.cwd(),execPath:process.execPath}))"
保存紀錄時,路徑可以在私有筆記中保留完整值;公開示例則改成能說明中文與空格的課程路徑。不要把環境變數全部列印,因為其中可能有權杖或其他與本篇無關的秘密。只收集診斷所需欄位。
使用中文與空格路徑重跑
把同一份 starter 解壓縮到「Claude 練習 78」資料夾,先在編輯器確認檔案完整,再由該位置執行模型與 Hook 測試。不要只把終端機提示文字改成中文;真正的絕對路徑需要含有這些字元,才能測到參數模型參數(Model Parameters)是什麼模型參數是訓練時調整、用來把輸入轉成輸出的數值,例如權重與偏差。本文用簡單算式示例說明參數如何影響預測,區分模型參數、訓練超參數、提示詞與生成設定,並解釋參數量、數值精度和啟用參數為何是不同指標。讀完能更準確閱讀模型規格,理解參數增加不等於知識逐條增加,也不代表每次聊天都在重新訓練模型。閱讀全文傳遞與路徑解析。
node --test tests/model.test.mjs tests/hooks.test.mjs
node hooks/replay.mjs audit fixtures/post-edit.json
node hooks/replay.mjs protect fixtures/pre-write.json
若直接執行腳本成功,真實 Hook 卻失敗,檢查 settings.json 的 command、工作目錄與實際 shell。路徑內有空格時,shell 形式的命令需要正確引號;程式內啟動子程序則優先使用參數陣列。不要把 JSON 跳脫、shell 引號與 JavaScript 字串當成同一層。
可攜式程式不應假設 node 安裝在作者電腦的固定位置。腳本內啟動同一執行環境時可使用 process.execPath;設定的外部入口則要確保使用者的 PATH 可找到 node。找不到執行檔是環境問題,和事件 JSON 是否有效要分開排查。
比較 LF、CRLF 與 UTF-8
本課 event.mjs 以 UTF-8 讀取 stdin,並處理起始 BOM。先用編輯器保存一份 LF 事件,再另存 CRLF,重播應得到相同語義結果。JSON 的正常空白和換行不應改變事件欄位,但不完整的字元或錯誤編碼可能讓解析失敗。
node -e "const fs=require('node:fs');const s=fs.readFileSync('fixtures/post-edit.json','utf8').replace(/\r?\n/g,'\r\n');fs.writeFileSync('fixtures/post-edit-crlf.json','\ufeff'+s,'utf8');"
重播器讀檔的解析入口也要處理同樣編碼,不能只改真正 Hook 的 stdin。若重播器先在 JSON.parse 失敗,事件根本還沒有到 Hook。請記錄失敗在哪一層,再決定修正哪個入口,避免把外層工具錯誤歸到 Hook 業務邏輯。
不要用會改變字串內容的全域替換處理換行。格式化 JSON 時應解析資料;程式碼字串內的跳脫字元則應保留。測試可以比較 JSON.parse 後物件相同,再檢查輸出是否符合預定換行,兩者各有用途。
讓慢程序在可控時間內停止
材料的 timeout-demo.mjs 啟動一個只等待的 Node 子程序,三百毫秒後由父程序的 timeout 結束它。這是獨立的本機逾時實驗,不修改 Claude 設定,也不啟動外部網路服務。輸出應有 expectedTimeout=true 與 ETIMEDOUT,而不是成功結果。
node hooks/timeout-demo.mjs
elapsedMs 不會在每台電腦都精確等於三百毫秒,因為程序啟動與排程需要時間。判準是有限時間內結束、狀態明確且沒有把逾時當成工作完成。不要寫一個只接受剛好三百毫秒的脆弱測試,反而把正常環境差異當成失敗。
本課子程序不再啟動孫程序,因此關閉範圍清楚。真實命令若會啟動伺服器或其他子程序,需要進一步處理程序樹,不能宣稱父程序收到終止訊號就代表所有後代都已消失。停用手冊應列出如何辨識本次啟動的程序及埠號。
重複事件與錯誤資料
使用 stop-repeated.json 重播 quality,確認不再無限輸出 block;同時以壞 JSON 測試 event 解析,確認得到明確錯誤。兩者都是失敗控制,但一個是有效事件的重複狀態,另一個是資料無法解析,處理方式不應相同。
node hooks/replay.mjs quality fixtures/stop-repeated.json
node --test tests/hooks.test.mjs
PostToolUse 格式化也要重播兩次,確認第二次不再改寫。事件重送可能來自重試或操作流程,本身不表示錯誤;真正要檢查的是重送會不會造成重複通知、資料破壞或無限遞迴。需要通知的流程可採用事件去重Claude Code|任務通知與事件紀錄:有用而不洗版產生可追查、去重且不含敏感內容的通知紀錄。通知最有用的時刻是工作完成、失敗或需要處理,而不是每個工具動作都提醒一次。本篇把事件紀錄與結果通知分開,使用本機假接收器驗證去重、失敗與重送,並確認通知只保存必要欄位,不把私人內容塞進日誌。閱讀全文。
故障練習是把 Hook 命令指向不存在的腳本。先觀察實際錯誤,再恢復正確路徑並重測。不要為了消除紅字把所有錯誤輸出丟掉;那會讓下一次故障更難追查。日誌應保留錯誤類型,但避免不必要的完整私人輸入。
恢復時先證明停用確實生效
停用故障 Hook 後,在新的工作階段執行一個無害的相同操作,確認原本錯誤不再出現。只改設定檔卻繼續沿用舊階段,可能讓你誤判停用無效。恢復前先用固定事件在終端機通過測試,再重新啟用。
記錄作業系統、終端機種類與 Node.js 版本。若問題只發生在某一環境,使用相同事件檔比較退出碼及輸出,不以另一台電腦成功來推定所有平台正常。
把停用手冊寫成可以照做的步驟
記下這次新增的設定路徑與事件項目。需要停止時,先中止本次工作,再恢復備份或移除自己新增的 Hook 項目,建立新工作階段確認沒有新觸發。若使用 Plugin,還要確認是停用外掛來源而不是只改了原始素材檔。
保留 run-data 作為診斷資料,依需要另外保存後再清理自己的練習目錄。不要使用「刪除所有 .claude」「關閉所有 Node」這種會影響其他工作的操作。故障恢復的目的是恢復可控狀態,同時保留可追查證據。
| 環境案例 | 需檢查內容 | 可標示的狀態 |
|---|---|---|
| 中文空格目錄 | 路徑、引號、工作目錄 | 通過、失敗、待測 |
| LF、CRLF、BOM | 各解析入口與輸出 | 通過、失敗、待測 |
| 慢程序 | 逾時、退出、程序存活 | 通過、失敗、待測 |
| 重複事件 | 冪等或有限重試 | 通過、失敗、待測 |
| 停用後新階段 | 不再有該來源的新觸發 | 通過、失敗、待測 |
完成本篇應交付矩陣、原始命令與結果,以及一份已照著做過的停用手冊。沒有實際測過的平台保留待測,即使你認為程式很可攜,也不能填成通過。小練習是請另一位讀者只看手冊恢復故障,記錄他卡住的位置,再補上缺少的路徑或判準。
當 Hook 需要分發給同事時,把這張矩陣放進Plugin 版本紀錄Claude Code|把 Skills 與 Hooks 包成可版本管理的 Plugin讓同伴安裝、升級與回退同一套工作流程。當一個 Skill 需要連同範本、參考文件和 Hook 分享給同事,逐個複製檔案容易漏件。本篇把差異審查流程整理成可辨識版本的本機 Plugin,驗證命名空間、腳本路徑、更新與停用,最後交付一個可搬到另一個資料夾使用的完整目錄。閱讀全文,每次調整依賴、命令或腳本入口都重跑受影響案例。可攜性應由可重現結果維護,而不是只靠 README 上的一句跨平台宣告。
回 Claude Code 教學總目錄Claude Code 完整教學目錄:從入門到自動化依平台、程度與功能找到需要的教學,從 96 篇文章與共用練習專案逐步完成操作。這個教學中心把 Claude Code 分成 96 個可以獨立閱讀的小題目,從桌面、CLI、網頁與手機開始,再學 MD 規則、常用指令、Skills、MCP 與自動化。你可以依推薦路線循序學習,也可以直接搜尋正在遇到的功能、命令或檔名。目錄依目前公開狀態顯示可閱讀文章。閱讀全文
同主題延伸閱讀
生活分享
Claude Code|建立第一個 mod:在 Claude Code 行程內數工具呼叫
寫一個三檔案的 mod,用驗證器與測試確認它掛上的事件。文件把 mod 定義成多了入口檔的 plugin:入口檔叫 hooks module,Claude Code 在事件發生時呼叫裡面的函式,函式可以觀察、改寫或接手事件。
生活分享
Claude Code|Git Worktree 平行工作
隔離多個任務的檔案與分支。Git Worktree 讓同一儲存庫擁有多個工作目錄,各自使用分支與檔案。本篇會把待辦篩選與文件整理分開,確認兩個 session 不會直接改到彼此的檔案,再把其中一個成果整合回主分支。你也會知道何時可以安全清理工作目錄。
生活分享
Claude Code|雙 Worktree 實作與衝突整合
隔離兩項功能,最後完成整合與回歸。兩個 Claude 工作階段同時編輯專案,最容易出現的問題是互相改到同一份檔案,或各自測試通過、整合後卻失敗。本篇用兩個 Worktree 分別處理篩選預設值與介面文字,故意製造一次小衝突,再完成整合、驗證與清理。你不需要先啟用 Agent Teams。
生活分享
Claude Code|比較流程品質、用量與執行時間
以同一資料集比較兩種工作方法。比較兩種 Claude 工作方法時,不能只挑成功那一次,也不能只看第一個答案有多快。本篇用固定案例、原始紀錄和一致判準,比較品質、重試、等待與人工整合時間,最後寫出有樣本數與限制的報告,而不是保證某個方法一定省錢。
引用本文的文章
最新旅遊情報攻略

情報
2026 韓國楓葉預測:雪嶽山 10 月 20 日、首爾近郊 10 月底、內藏山與漢拏山 11 月上旬
韓國山林廳 2026 年 9 月 22 日公布的楓紅高峰預測:雪嶽山 10 月 20 日,春川、國立樹木園到首爾植物園落在 10 月 28 日到 11 月 2 日,內藏山 11 月 4 日、漢拏山 11 月 6 日,整體比最近 5 年晚約 0.8 天。整理各地楓樹與銀杏的預測日、首爾出發怎麼排,以及出發前去哪裡看即時楓況。2026 年 10 月查證。
- 季節活動
- 自然
- 觀景

攻略胡志明市
胡志明市到頭頓一日遊:白藤碼頭搭高速船、船票與班次,下船就是胡梅纜車與耶穌基督像
人在胡志明市挪一天去頭頓看海:市中心的白藤高速船碼頭搭船,航程 120 分鐘到頭頓的胡梅碼頭,平日成人 320,000 越南盾、週末 350,000,回程末班平日 15:00。下船就是胡梅纜車站,同一條路上有白宮,小山頂上是耶穌基督像。平日一天只有兩班船,整天要從末班船倒推著排。
- 交通
- 行程範例
- 海灘

攻略沖繩
沖繩不開車攻略:單軌只到浦添,美麗海水族館要坐兩個多小時的巴士,回那霸的最後一班直達車 17:22 就開走
不租車的沖繩怎麼移動:那霸市區靠沖繩都市單軌電車(ゆいレール),那霸機場站到終點てだこ浦西 19 站、17 公里、37 分鐘,一日券 1,000 日圓;美麗海水族館有那霸機場直達的高速巴士,單程 2,000 日圓起、官方時刻表上 2 小時上下,下車後還要走 10 分鐘;古宇利島要在今帰仁村役場轉車,當天來回光坐車就六個半小時;回程的最後一班直達車 17:22 就從記念公園前開走(2026 年 9 月查證)。
- 交通
- 行程範例
- 預算
資料來源
- Hooks reference · 查證日期: