JianFeeeee
da5d9339e2
把 PATH 归一化提到文件最前(修我 54d641e 那个"只修一半"的修法),并把 --help 从数行号改成锚定
★ 我上一版(54d641e)修了三条触发带,但**引入了第二个问题**(矩阵实测发现):
空 PATH / 最小 PATH 下: de1b072 rc=2("找不到 git"+人话,**符合**本仓环境词汇表)
in-block rc=**128**("fatal: not in a git directory",**不在**词汇表)
⇒ 因为归一化仍在 `REPO=…dirname…`(line 11)**之后** ⇒ dirname 先失败 ⇒ REPO 退化成 /
⇒ ★ "修一处、坏一处":我把一处**符合约定的人话诊断**换成了**裸退出码**
★ 正确位置 = **文件最前**(env-defaults.sh:124 自己也注明 ④「**必须排在最前**」):
4 变体 × 6 种 PATH 矩阵(真 git worktree,工具齐全但 PATH 无 git):
PATH old(^de1b072) de1b072 in-block(54d641e) final
(空) 1/- 2/- 128/- **0/.githooks**
仅 bash/env 1/- 2/- 128/- **0/.githooks**
/opt/tools 0/.githooks 2/- 0/.githooks **0/.githooks**
/usr/local/sbin 0/.githooks 2/- 0/.githooks **0/.githooks**
/sbin:/usr/sbin 0/.githooks 2/- 0/.githooks **0/.githooks**
/usr/bin 0/.githooks 0/.githooks 0/.githooks **0/.githooks**
⇒ final 六行全绿;连跑两次幂等;`command -v git` 真失败时仍 exit 2 + 人话(负控制保留)
★ 顺带修一处**既存**脆弱点(被本次插入暴露,非本次引入):
`--help` 原为 `sed -n '2,20p'`(**数行号**)⇒ 任何人往文件头插行都会让它开始印**实现代码**
(原版就已经把 `set -euo pipefail`/`REPO=…` 印出来;插 PATH 块后会多印 5 行 case…esac)
改为 `usage()` = `sed -n '2,/^set -euo pipefail/p' | sed '$d'`(**锚定**)
实测: --help 7 行纯注释 ✓(原 19 行含代码);相对/绝对/符号链接三种调用都 rc=0 ✓
★ 验证: bash -n OK;mode=755;mode gate 对 install.sh 零命中
★ 边界: 只改 deploy/install.sh 一个文件;生产未动(仍 09-19 13:04)
2026-09-25 05:43:57 +08:00
..
2026-09-15 14:12:48 +08:00
2026-09-14 08:38:33 +08:00
2026-09-13 11:06:01 +08:00
2026-09-15 07:00:35 +08:00
2026-09-21 05:19:49 +08:00
2026-09-24 04:15:30 +08:00
2026-09-18 04:07:26 +08:00
2026-09-12 11:36:25 +08:00
2026-09-14 23:33:11 +08:00
2026-09-14 20:35:01 +08:00
2026-09-25 05:43:57 +08:00
2026-09-21 07:14:41 +08:00
2026-09-14 15:51:40 +08:00
2026-09-15 11:21:00 +08:00
2026-09-14 23:33:11 +08:00
2026-09-14 21:26:51 +08:00
2026-09-06 15:18:06 +08:00
2026-09-02 20:05:51 +08:00
2026-09-13 11:06:01 +08:00
2026-09-13 11:06:01 +08:00
2026-09-14 08:38:33 +08:00