Commit f996495
`--help` 过去用硬编码行号 `sed -n '2,26p'` 打印自己的头注释,行号与 header 内容之间
没有任何机制耦合:往 header 加一行帮助就静默截断,删一行就越界打进下一段。两种情况都
exit 0、都打印了「一些东西」,所以截断的帮助和完整的帮助长得一模一样。
这不是假设。#5960 往 header 加了 pin 更新步骤,把真正的结尾从第 19 行推到第 26 行,
PR #6421 只能手工挪这个魔法数字,并留下一条「请下一位作者注意」的 NOTE。注释不是机制。
改法是把行号换成哨兵 `# --help ends here`,让终止符与它所终止的内容放在一起:
- `sed -n '2,/^# --help ends here$/p'` 取到哨兵为止。起始的 `2` 定位的是 shebang,
位置由 execve 固定,不随 header 内容漂移,因此不是会漂的行号。
- `grep -vxF` 按整行精确剔掉哨兵本身,而不是按子串过滤,header 里即便提到这句话也不会
被连带吃掉。
- 哨兵缺失时 exit 1 并说明如何恢复,而不是一路打印到 EOF(实测无此闸会吐出 231 行)。
闸只设在 --help 分支:删掉一条注释不该让真正的 pin bump 跑不起来。
同时删掉 `:66-68` 那条来自 PR #6421 的手工耦合 NOTE —— 哨兵落地后它即成假话,留着
只是把谎言搬个家。
验证:改动前后 `--help` 输出逐字节一致(25 行 / 1363 字节);往 header 加一行后新行
出现,而同一探针在旧脚本上被静默丢弃。
Claude-Session: https://claude.ai/code/session_01BDmDsu2575gDxeMCxXhDE3
Co-authored-by: Claude <noreply@anthropic.com>
1 parent eb7613c commit f996495
1 file changed
Lines changed: 26 additions & 4 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
24 | 24 | | |
25 | 25 | | |
26 | 26 | | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
27 | 34 | | |
28 | 35 | | |
29 | 36 | | |
| |||
63 | 70 | | |
64 | 71 | | |
65 | 72 | | |
66 | | - | |
67 | | - | |
68 | | - | |
69 | | - | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
70 | 92 | | |
71 | 93 | | |
72 | 94 | | |
| |||
0 commit comments