Shell
Bash, zsh, cron and process quirks that break scripts silently.
zsh 變數後接冒號會被當成 modifier
21 條分支全部回 0,看起來像「沒有命中」,其實每條都有 2~3 個。「全部回 0」比「部分回 0」更可疑:先拿一條手動驗證,對照組不一致就是工具鏈的問題。
CentOS 搬到 Ubuntu 後 cron 腳本被 dash 靜默打壞
Mongo 過期資料清理的兩支腳本,從 CentOS 裸機搬到 Ubuntu 26.04 docker 機。「手動測過」不等於「cron 會跑」:兩者的 shell 不同。
npx skills 相對路徑 symlink 在 symlink 目錄下失效
跑 npx skills check 後,Claude Code 讀不到 hyperframes 系列、media-use、herdr、share-html 等 skill。相對路徑 symlink 的解析基準是 symlink 檔案「實際所在」的目錄,不是你走進來的那條路徑。
flock 的 fd 會被子進程繼承,讓 cron 監控靜默死亡
一支用 flock 防重疊的 cron 監控腳本,某台機器連續多輪回報「零命中」。人工用同一套判準手動驗證,卻發現目標明明還在——五個服務全部中標。「監控靜默死亡」比「沒裝監控」危險。
detached Popen 讓 PPID=1,看起來像 launchd 拉的
兩個 session 講好共用一台租來的 GPU:A 先跑 6 張、不關機,B 接著跑 16 張、跑完關機。B 只送了 16 個任務,遠端佇列卻有 30 個。PPID=1 不代表 launchd。
bash 全形標點緊接變數會被吃進變數名,set -u 下讓整個函式靜默不執行
腳本沒有任何錯誤輸出、exit code 也不是 0 以外的值(因為 stderr 被 2>&1 | grep 過濾掉了),log 檔停在函式呼叫前的最後一行,看起來就像「函式沒被呼叫」。set -u + 管線過濾 stderr = 靜默失敗。