背景与动机
chsrc 的 -dry 模式非常实用,可以模拟换源过程并打印将要执行的命令。但目前输出内容为纯文本,其中混有提示信息、换源命令、额外说明等,不利于自动化工具(如 Dockerfile 生成、CI 脚本、配置管理工具)直接解析。
例如,执行 chsrc set -dry alpine 会输出:
chsrc: 开启Dry Run模式,模拟换源过程(跳过测速),命令仅打印并不运行
选中镜像站: TUNA (tuna)
--------------------------------
[chsrc 运行] sed -i 's#https\?://dl-cdn.alpinelinux.org/alpine#https://mirrors.tuna.tsinghua.edu.cn/alpine#g' /etc/apk/repositories
[chsrc 运行] apk update
--------------------------------
感谢镜像提供方: 清华大学开源软件镜像站
...
对于自动化场景,我希望能够直接获得一个 干净的、可编程处理的命令列表,而不必用正则表达式去猜测哪些行是真正的命令。
期望功能
为 chsrc set 命令增加一个 --json 参数,当与 -dry 一起使用时,只输出一个 JSON 对象(不输出其它任何人类可读的提示信息),其中包含:
- 本次操作的基本信息(目标、选择的镜像源等)
- 需要执行的命令数组(每条命令可附带描述)
使用示例
chsrc set -dry alpine --json
期望输出(缩进仅用于阅读,实际可压缩为一行):
{
"version": "1.0",
"dry_run": true,
"target": "alpine",
"selected_mirror": {
"name": "TUNA",
"url": "https://mirrors.tuna.tsinghua.edu.cn/alpine"
},
"commands": [
{
"command": "sed -i 's#https\\?://dl-cdn.alpinelinux.org/alpine#https://mirrors.tuna.tsinghua.edu.cn/alpine#g' /etc/apk/repositories",
"description": "替换 Alpine apk 软件源为 TUNA 镜像站"
},
{
"command": "apk update",
"description": "更新软件包索引"
}
]
}
应用场景
-
生成 Dockerfile:
直接解析 commands 数组,将其转换为 RUN 指令,无需手工提取命令。
-
配置管理(Ansible / Puppet 等):
将换源操作作为幂等任务集成到自动化工具中。
-
构建自定义镜像脚本:
在脚本中动态获取换源命令,应对不同发行版或软件源。
实现建议(供开发者参考)
- 仅在同时指定
-dry 和 --json 时启用 JSON 输出模式。
- 关闭所有人类可读的输出(包括
chsrc: 开头的提示、分隔线、感谢信息等),只打印一个 JSON 对象。
- 可以考虑将
commands 数组中的 command 字段保持为 原始字符串(不转义额外的 shell 元字符),以便直接复制或执行。
- 若未来支持多个镜像站备选或测速结果,可预留
mirrors_candidate 字段。
附加说明
- 如果该项目已有类似的输出控制参数(如
--quiet 或 --plain),我愿意与之保持一致。
- 如果需要我帮助测试或提供更多样本输出,请告知。
感谢维护者的辛勤工作!chsrc 是一个非常实用的工具,如果能增加 --json 支持,将极大扩展它在自动化生态中的价值。
背景与动机
chsrc的-dry模式非常实用,可以模拟换源过程并打印将要执行的命令。但目前输出内容为纯文本,其中混有提示信息、换源命令、额外说明等,不利于自动化工具(如 Dockerfile 生成、CI 脚本、配置管理工具)直接解析。例如,执行
chsrc set -dry alpine会输出:对于自动化场景,我希望能够直接获得一个 干净的、可编程处理的命令列表,而不必用正则表达式去猜测哪些行是真正的命令。
期望功能
为
chsrc set命令增加一个--json参数,当与-dry一起使用时,只输出一个 JSON 对象(不输出其它任何人类可读的提示信息),其中包含:使用示例
chsrc set -dry alpine --json期望输出(缩进仅用于阅读,实际可压缩为一行):
{ "version": "1.0", "dry_run": true, "target": "alpine", "selected_mirror": { "name": "TUNA", "url": "https://mirrors.tuna.tsinghua.edu.cn/alpine" }, "commands": [ { "command": "sed -i 's#https\\?://dl-cdn.alpinelinux.org/alpine#https://mirrors.tuna.tsinghua.edu.cn/alpine#g' /etc/apk/repositories", "description": "替换 Alpine apk 软件源为 TUNA 镜像站" }, { "command": "apk update", "description": "更新软件包索引" } ] }应用场景
生成 Dockerfile:
直接解析
commands数组,将其转换为RUN指令,无需手工提取命令。配置管理(Ansible / Puppet 等):
将换源操作作为幂等任务集成到自动化工具中。
构建自定义镜像脚本:
在脚本中动态获取换源命令,应对不同发行版或软件源。
实现建议(供开发者参考)
-dry和--json时启用 JSON 输出模式。chsrc:开头的提示、分隔线、感谢信息等),只打印一个 JSON 对象。commands数组中的command字段保持为 原始字符串(不转义额外的 shell 元字符),以便直接复制或执行。mirrors_candidate字段。附加说明
--quiet或--plain),我愿意与之保持一致。感谢维护者的辛勤工作!
chsrc是一个非常实用的工具,如果能增加--json支持,将极大扩展它在自动化生态中的价值。