diff --git a/dsh-server-docs/scripts/bash-output-guard.py b/dsh-server-docs/scripts/bash-output-guard.py index d0daa63..aadd486 100644 --- a/dsh-server-docs/scripts/bash-output-guard.py +++ b/dsh-server-docs/scripts/bash-output-guard.py @@ -45,10 +45,15 @@ RULES = [ # cat:**按目标文件大小判定**(小文件不拦)—— 这是防日常误伤的关键,见 cat_bigfile() (True, '__CAT_BIGFILE__', '`cat` 大文件', '改用 `head -30 文件` / `sed -n \'1,30p\' 文件` / `wc -l 文件`'), - (True, r'\bgrep\b[^|;]*-[a-zA-Z]*[rR]', + # ⚠️ 2026-09-15 **回放今日 12 个会话的 4049 条真实命令**:本规则命中 62 次,抽样 **29/29 全是窄范围** + # (单文件 / 具体目录),**0 条从根**;连 `grep -c` 这种本来只有几行的也被误伤。 + # 旧正则 `\bgrep\b[^|;]*-[a-zA-Z]*[rR]` 还有 bug:`[^|;]*` 会匹配到**路径里的 `-server`** + # (`-s`+`erve`+`r`)⇒ 凡路径含 `aliyun-dsh-server` 就必命中。 + # ⇒ **误伤 >> 收益** ⇒ 降为 loose(仅 `hard` 模式拦),并把正则收紧到「选项紧跟 grep」。 + (False, r'\bgrep\s+-[a-zA-Z]*[rR]\b', '递归 grep', '改用 `grep -rn … | head -30`,或 `grep -rc …`(只要计数)'), - # ⚠️ 只拦 -R(递归全树);**不拦 `ls -la`**(含 l 会误伤日常操作 —— 2026-09-15 自查发现) - (True, r'\bls\b[^|;]*-[a-zA-Z]*R', + # ⚠️ 只拦 `-R`(递归全树);**不拦 `ls -la`**(含 l 会误伤日常);选项必须紧跟 ls(同样防路径误匹配) + (True, r'\bls\s+-[a-zA-Z]*R\b', '`ls -R` 递归全树', '改用 `ls -la 目录 | head -20`,或 `ls 目录 | wc -l`'), (True, r'\bfind\s+(/[A-Za-z]|[A-Za-z]:)', '`find` 从盘符/根起全树扫', '改用 `find 具体目录 -maxdepth 3 … | head -20`'),