Verify steps
Description
ShellCrash 在拆分订阅配置时会丢失写在 proxies: 同一行上的节点列表。该 flow-style 写法是合法 YAML;将相同内容转换为 block-style 多行格式后,现有合并流程及 Mihomo 校验可以通过。
环境与官方文件确认
- 小米路由器 / BusyBox ash,Linux arm64。
- ShellCrash:1.9.5beta3,更新源 master。
- 内核:Mihomo Meta v1.19.17。
- 路由器
starts/clash_modify.sh 与官方 master ShellCrash.tar.gz 内同名文件逐字节一致(13,838 bytes)。
- SHA-256:
44a9dc3bde3f46b37bdd16858488a4b6470dd7e92f97c068bb4d720ab3c155f3。
- 检查时 master HEAD:
eb0c211c176323815f67aa088d8152d6038cab21。
最小复现
以下是依据实际订阅返回结构构造的合成样例,域名及密码均为无效测试值,不包含真实订阅地址或认证信息。
proxies: [{name: demo-node, type: ss, server: example.invalid, port: 443, cipher: aes-128-gcm, password: dummy-not-a-real-secret}]
proxy-groups:
- name: demo-select
type: select
proxies: [demo-node]
rules:
- MATCH,demo-select
将其保存为 input.yaml,运行 split_and_customize_yaml_parts() 使用的提取命令:
sed -n '/^proxies:/,/^[a-z]/ { /^[a-z]/d; p; }' input.yaml
实际验证:YAML 解析器读取到一个节点,而上述命令退出码为 0,输出为 0 字节。原因是 /^[a-z]/d 删除了同时包含键和全部节点内容的 proxies: [...] 行。
实际现象及因果链
- 真实订阅下载成功,原始响应中包含节点及相应策略组引用。
- 用现有 ShellCrash 配置合并函数生成候选运行配置,节点列表被漏掉,策略组引用仍保留。
- Mihomo
-t -d <工作目录> -f <候选配置> 报节点 not found,校验失败。
- 将同一份订阅用 YAML 解析器转换为多行格式,再调用相同合并函数,校验通过。
- 经
PUT /configs 热加载返回 HTTP 204,内核 PID 未变,代理访问 generate_204 返回 HTTP 204。
本次校验失败期间未将候选配置加载到运行内核。这里验证的是原合并函数及实际内核校验链,并未声称通过菜单完成了整个更新操作。
期望与建议
支持合法的 flow-style proxies: [...],保留节点及本地覆写;或在拆分前可靠规范化 YAML。建议至少覆盖 flow-style/block-style 等价输入,以及合并后节点缺失时拒绝替换旧配置的回归场景。
目前只对订阅副本做了格式转换来绕过,未修改 ShellCrash 官方脚本;后续订阅再次返回单行格式时仍可能复现。
Verify steps
clash_modify.sh和“单行”,未找到相同问题。Description
ShellCrash 在拆分订阅配置时会丢失写在
proxies:同一行上的节点列表。该 flow-style 写法是合法 YAML;将相同内容转换为 block-style 多行格式后,现有合并流程及 Mihomo 校验可以通过。环境与官方文件确认
starts/clash_modify.sh与官方 masterShellCrash.tar.gz内同名文件逐字节一致(13,838 bytes)。44a9dc3bde3f46b37bdd16858488a4b6470dd7e92f97c068bb4d720ab3c155f3。eb0c211c176323815f67aa088d8152d6038cab21。最小复现
以下是依据实际订阅返回结构构造的合成样例,域名及密码均为无效测试值,不包含真实订阅地址或认证信息。
将其保存为
input.yaml,运行split_and_customize_yaml_parts()使用的提取命令:sed -n '/^proxies:/,/^[a-z]/ { /^[a-z]/d; p; }' input.yaml实际验证:YAML 解析器读取到一个节点,而上述命令退出码为 0,输出为 0 字节。原因是
/^[a-z]/d删除了同时包含键和全部节点内容的proxies: [...]行。实际现象及因果链
-t -d <工作目录> -f <候选配置>报节点not found,校验失败。PUT /configs热加载返回 HTTP 204,内核 PID 未变,代理访问 generate_204 返回 HTTP 204。本次校验失败期间未将候选配置加载到运行内核。这里验证的是原合并函数及实际内核校验链,并未声称通过菜单完成了整个更新操作。
期望与建议
支持合法的 flow-style
proxies: [...],保留节点及本地覆写;或在拆分前可靠规范化 YAML。建议至少覆盖 flow-style/block-style 等价输入,以及合并后节点缺失时拒绝替换旧配置的回归场景。目前只对订阅副本做了格式转换来绕过,未修改 ShellCrash 官方脚本;后续订阅再次返回单行格式时仍可能复现。