R6.6 行尾一律 LF + 验脚本要真跑;反例表补三行症状

补充上一个提交(CRLF 死脚本)的规则化:把"文件在、文档说能用、一跑就死"
和"bash -n 漏报 CRLF"两条症状写进第 8 节反例表,并新增 R6.6。

为什么单独立一条:这次踩的不是"哪个脚本写错了",而是"验收手段本身不可靠"——
bash -n 返回 OK 却执行立刻死。所以 R6.6 明确三件事:
  验语法 bash -n(必要但不充分)、验能用 bash <脚本> --help、验行尾看 file/.gitattributes。

顺带在反例表补了"代码里一半英文 docstring 一半中文注释"一行,指向 R6.5。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
arm_dev
2026-09-23 17:41:24 +08:00
parent 806efe4df1
commit 4884fc34ae
+21
View File
@@ -367,6 +367,24 @@ ROS 构建对非 ASCII 路径会出各种问题。工作目录保持 ASCII(推
再比对 —— 必须完全相同。这条检查会抓出"顺手改名""顺手调整语句顺序""漏掉一个
f-string 插值"这类问题;而"为了中文语序把两个插值换个显示顺序"属于允许的改动。
工具:`python3 scripts/check_text_only.py`(基准是 `git HEAD`,所以要在提交前跑)。
### R6.6 行尾一律 LF;验脚本要**真跑**,不能只看 `bash -n`
行尾由 `.gitattributes` 兜住(`* text=auto eol=lf`,厂商上游 `-text` 不动)。
为什么专门立一条:`scripts/run_hole_detect.sh` 和 `scripts/run_dual_gripper.sh`
曾经是 CRLF,于是 bash 把行尾的 `\r` 当成标识符的一部分,
`case "$1" in\r`、`set -eo pipefail\r` 全部变成非法记号 ——
**文件在、五处文档说能用、命令一敲就死**,而报错信息里的 `\r` 根本看不出来。
更坑的是:`bash -n` 对其中一个还返回 OK,实际执行立刻死在第 6 行。
所以"静态检查通过"不等于"脚本能用":
- 验语法:`bash -n`(必要但不充分,CRLF 会漏报)
- 验能用:`bash <脚本> --help`
- 验行尾:`file <文件>`,或看 `.gitattributes` 有没有覆盖到
---
## 7. 改动前的检查清单
@@ -416,6 +434,9 @@ f-string 插值"这类问题;而"为了中文语序把两个插值换个显示
| `pkill -f gz` 秒返回、什么都没停 | 它先匹配到调用它的 shell | R4.10 |
| 换了台臂却连错机器 | 硬编码的 `Rizon4-063989` 默认值 | R1.1 |
| `assets_root()` 指向从未存在的 `assets/` | 零调用者的死代码,没人发现 | R5.5 |
| 脚本报 `$'\r': 未找到命令`、`set: pipefail: 无效的选项名` | 脚本是 CRLF 行尾,`\r` 被当成标识符的一部分 | R6.6 |
| `bash -n` 说没问题,真跑立刻死 | `bash -n` 对 CRLF 会漏报 —— 静态检查≠能用 | R6.6 |
| 代码里一半英文 docstring 一半中文注释 | 没有统一口径,谁写谁定 | R6.5 |
---