條目只帶放得下 CLI 執行檔的那幾個目錄,不快照整條 PATH #32

Merged
admin merged 1 commits from fix/schedule-path-only-cli-dirs into develop 2026-09-04 07:13:26 +00:00
Member

摘要

  • 需求描述:上一版把整條 PATH 快照進排程條目,實測直接裝不起來——crontab 一行有長度上限,回的是 command too long、結束碼 4。這張改成只帶放得下 CLI 執行檔的那幾個目錄。
  • 計畫名稱:無
  • 計畫頁:無
  • 分析頁:無

變更內容

檔案 為什麼改
tools/schedule.sh PATH 不再走通用快照那條路,改由一支小函式從 command -v 推出 CLI 執行檔所在的目錄
references/behaviors.md 條目那一段記下這個取捨與它的代價
三份 manifest 版號 0.2.5 升到 0.2.6

三個數字

做法 長度
整條 PATH 照抄 2160 字元 → 裝不起來
去重、再去掉不存在的那幾段 1332 字元 → 仍然超過
只帶放得下 CLI 執行檔的目錄 70 字元,整行降到 685

去重與去死路徑都不夠。這台機器的 PATH 有 61 段,光是還活著又不重複的就 38 段。

為什麼只帶那幾個目錄就夠

這一條要解決的問題很窄:cron 只給 /usr/bin 與 /bin,而偵測 CLI 那一支靠 PATH 找執行檔,找不到就回結束碼 0 加一份空清單——看起來像「這台機器沒裝 CLI」。

巡檢要跑的指令本身走的是字面絕對路徑,不靠這一條。 靠它的只有那幾支腳本自己呼叫的外部程式。

收尾接上 cron 本來就會給的兩段,免得只剩自訂目錄而找不到系統工具。

一個代價,寫進註解

有些 CLI 裝在會過期的目錄底下——這台機器上就有一支落在帶行程編號的多殼層目錄裡,那種路徑下一次開機就不在了。

這裡不特別過濾。 過濾要認得每一種安裝方式,而那份名單會過期得比路徑還快——今天已經看過好幾次靜態名單怎麼壞的。重跑一次 install 就重新拍一份,而條目本來就是安裝當下的快照。

這個坑是怎麼發現的

不是靠測試,是靠真的裝一次。乾跑不會踩到——--dry-run 不呼叫 crontab,長度上限是 crontab 自己檢查的。

上一版的測試全過,因為每一項都繞過了會失敗的那一步。 這一次真的裝了,才知道裝不起來。

測試結果

  • 拿條目會帶的那條 PATH 在清空環境裡跑,五支 CLI 全解得出來:claude、codex、copilot、antigravity、kiro。
  • 真的裝一次:結束碼 0,service=running,current_links=ok,自我檢核零誤報。
  • 條目那一行 685 字元。
  • lint-scripts.sh、check-behaviors.sh、ste100-lint.sh 三支都回結束碼 0。
  • 上一版失敗那一次沒有弄壞任何東西:寫入失敗時什麼都沒動,舊條目完好,排程照常運作。

前置 Push Request

  • 無
## 摘要 - 需求描述:上一版把整條 `PATH` 快照進排程條目,實測直接裝不起來——crontab 一行有長度上限,回的是 `command too long`、結束碼 4。這張改成只帶放得下 CLI 執行檔的那幾個目錄。 - 計畫名稱:無 - 計畫頁:無 - 分析頁:無 ## 變更內容 | 檔案 | 為什麼改 | | --- | --- | | `tools/schedule.sh` | `PATH` 不再走通用快照那條路,改由一支小函式從 `command -v` 推出 CLI 執行檔所在的目錄 | | `references/behaviors.md` | 條目那一段記下這個取捨與它的代價 | | 三份 manifest | 版號 0.2.5 升到 0.2.6 | ## 三個數字 | 做法 | 長度 | | --- | --- | | 整條 `PATH` 照抄 | 2160 字元 → 裝不起來 | | 去重、再去掉不存在的那幾段 | 1332 字元 → 仍然超過 | | **只帶放得下 CLI 執行檔的目錄** | **70 字元**,整行降到 685 | 去重與去死路徑都不夠。這台機器的 `PATH` 有 61 段,光是還活著又不重複的就 38 段。 ## 為什麼只帶那幾個目錄就夠 這一條要解決的問題很窄:cron 只給 `/usr/bin` 與 `/bin`,而偵測 CLI 那一支靠 `PATH` 找執行檔,找不到就回結束碼 0 加一份空清單——看起來像「這台機器沒裝 CLI」。 **巡檢要跑的指令本身走的是字面絕對路徑,不靠這一條。** 靠它的只有那幾支腳本自己呼叫的外部程式。 收尾接上 cron 本來就會給的兩段,免得只剩自訂目錄而找不到系統工具。 ## 一個代價,寫進註解 有些 CLI 裝在會過期的目錄底下——這台機器上就有一支落在帶行程編號的多殼層目錄裡,那種路徑下一次開機就不在了。 **這裡不特別過濾。** 過濾要認得每一種安裝方式,而那份名單會過期得比路徑還快——今天已經看過好幾次靜態名單怎麼壞的。重跑一次 `install` 就重新拍一份,而條目本來就是安裝當下的快照。 ## 這個坑是怎麼發現的 不是靠測試,是靠真的裝一次。乾跑不會踩到——`--dry-run` 不呼叫 `crontab`,長度上限是 `crontab` 自己檢查的。 **上一版的測試全過,因為每一項都繞過了會失敗的那一步。** 這一次真的裝了,才知道裝不起來。 ## 測試結果 - 拿條目會帶的那條 `PATH` 在清空環境裡跑,五支 CLI 全解得出來:`claude`、`codex`、`copilot`、`antigravity`、`kiro`。 - 真的裝一次:結束碼 0,`service=running`,`current_links=ok`,自我檢核零誤報。 - 條目那一行 685 字元。 - `lint-scripts.sh`、`check-behaviors.sh`、`ste100-lint.sh` 三支都回結束碼 0。 - 上一版失敗那一次沒有弄壞任何東西:寫入失敗時什麼都沒動,舊條目完好,排程照常運作。 ## 前置 Push Request - 無
jiantw83 added 1 commit 2026-09-04 07:12:36 +00:00
上一版把整條 PATH 快照進條目,實測直接裝不起來:crontab 一行有長度上限,
回的是 command too long,結束碼 4。這台機器的 PATH 是 2160 字元,去重又去掉
不存在的那幾段之後還有 1332 字元,仍然超過。

改成只帶放得下 CLI 執行檔的那幾個目錄,這台機器實測兩個、合起來 70 字元,
整行降到 685 字元。夠用的理由是這一條要解決的問題很窄:cron 只給 /usr/bin
與 /bin,而偵測 CLI 那一支靠 PATH 找執行檔,找不到就回結束碼 0 加一份空清單
——看起來像「這台機器沒裝 CLI」。巡檢要跑的指令本身走字面絕對路徑,不靠它。

收尾接上 cron 本來就會給的那兩段,免得只剩自訂目錄而找不到系統工具。

一個代價寫進註解:有些 CLI 裝在會過期的目錄底下,例如帶行程編號的多殼層
目錄,那種路徑下一次開機就不在了。不特別過濾——過濾要認得每一種安裝方式,
那份名單會過期得比路徑還快。重跑一次 install 就重新拍一份,而條目本來就是
安裝當下的快照。

實測:拿條目會帶的那條 PATH 在清空環境裡跑,五支 CLI 全解得出來;真的裝一次
回結束碼 0,服務在跑,連結檢查通過。

三份 manifest 版號 0.2.5 升到 0.2.6。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
admin merged commit cc5faaff21 into develop 2026-09-04 07:13:26 +00:00
admin deleted branch fix/schedule-path-only-cli-dirs 2026-09-04 07:13:26 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: plugins/assist#32