fix(role): 檢查腳本自行載入設定,修正 cron 環境取不到變數
晨間狀態檢查在 cron 下實際不會運作:cron 沒有互動 shell 的環境變數, 而 ~/.bashrc 多數在非互動時提早 return,導致範例腳本永遠拿不到 GITEA_TOKEN 而安靜結束,功能等於無效。 - examples/check-gitea-prs.sh 新增 load_env_var():依序從 ~/.roles/.env、 ~/.bashrc、~/.profile 只抽取所需變數的那一行並 eval 該行賦值, 不要求使用者把權杖複製到新檔案,也不必寫進 crontab - role skill 補設定來源說明:非機密放 ~/.roles/.env(權限 600), 權杖留在原本位置不要複製副本 - 版號 0.0.4 → 0.0.5 驗證:以 env -i 模擬 cron 環境(完全無環境變數)執行,成功取得設定並列出 待合併 PR;確認輸出無疑似權杖字串、.env 不含權杖。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -256,7 +256,14 @@ chmod +x ~/.roles/<角色 ID>.checks/check-gitea-prs.sh
|
||||
| 遮蔽 | 腳本輸出視為外部資料,寫入記憶前一律經 `transcript.js redact` 遮蔽憑證與個資 |
|
||||
| 記憶分類 | 寫成 `daily` 低優先度記憶,會依遺忘規則自然淘汰,不會長期堆積 |
|
||||
|
||||
**安全須知**:這個機制會以使用者身分執行 `.checks/` 內的腳本,等同於自己寫的 cron job。只放自己看得懂的腳本,不要放來源不明的檔案。cron 沒有互動 shell 的環境變數,腳本需要的設定要自己在腳本內處理或寫進 crontab。
|
||||
**cron 沒有互動 shell 的環境變數**,而 `~/.bashrc` 多數在非互動時會提早 return,因此檢查腳本不能假設變數已存在。範例腳本的做法是依序從 `~/.roles/.env`、`~/.bashrc`、`~/.profile` **只抽取所需變數的那一行**,讓使用者不必把權杖複製到新檔案、也不必寫進 crontab:
|
||||
|
||||
| 設定 | 建議放置位置 |
|
||||
| --- | --- |
|
||||
| 非機密(站台網址、repo 清單等) | `~/.roles/.env`(權限設 `600`) |
|
||||
| 權杖與密碼 | **留在原本的位置**,例如 `~/.bashrc`;不要複製出副本 |
|
||||
|
||||
**安全須知**:這個機制會以使用者身分執行 `.checks/` 內的腳本,等同於自己寫的 cron job。只放自己看得懂的腳本,不要放來源不明的檔案。腳本輸出寫入記憶前雖然會經 `redact` 遮蔽,但仍不應在腳本中主動印出憑證。
|
||||
|
||||
### 額度控制策略
|
||||
|
||||
|
||||
Reference in New Issue
Block a user