Agent Skills
返回列表
💻

用 zx 编写可靠命令行脚本指南

开发编程 更新于 2026.08.29

将以下提示词粘贴到你的 AI 对话框中:

请根据 https://skillhub.cn/install/skillhub.md,在 AI 助手中安装 @kunlungrowth/zx-scripting-guide。

技能介绍

告别 Bash 引号地狱

当命令行脚本突破三十行,或开始涉及复杂的字符串拼接与多重条件分支时,原生 Bash 的维护成本会急剧上升。引号转义混乱、错误处理缺失以及难以阅读的语法,往往让原本简单的自动化任务变成排查痛苦的源头。本技能面向被这些问题折磨过的工程师,主张在脚本规模和复杂度达到临界点时,转向 JavaScript/TypeScript 生态。

zx 脚本编写五步法

基于 zx 的设计,该指南将命令行编排转化为可读、可测的工程代码。其核心方法论包含五个关键步骤:

  • 声明解释器:在脚本首行使用 #!/usr/bin/env zx 并赋予执行权限,从而获得顶层 await 的支持。
  • 调用与管道:通过 await $command 执行外部命令,返回包含 stdout、stderr 和 exitCode 的对象,天然支持管道操作。
  • 分级错误处理:利用 try/catch 捕获致命错误,或使用 .nothrow() 处理预期内的失败,避免脚本静默吞错。
  • 输出解析与集成:结合 chalk 进行终端上色、使用 fs 读写文件及 glob 遍历目录,将命令输出无缝接入 JS 逻辑。
  • 参数与配置管理:通过 argv 读取输入,敏感信息严格走环境变量,杜绝硬编码。

适用边界与避坑指南

虽然 zx 能显著提升脚本的工程化水平,但使用时仍需注意几个关键陷阱。切勿忘记 await,否则后续步骤会在命令未完成时提前执行;在模板字符串中传递变量时,务必注意 ${} 的 JS 求值特性,防范命令注入风险;此外,zx 是 JS 运行时而非 Bash 解释器,循环与判断必须使用 JS 语法,严禁混用 if [ ... ]。对于涉及生产环境或 CI/CD 流水线的脚本,建议先在隔离环境中充分验证,并锁定 zx 的版本依赖。

使用场景

  • 当部署脚本超过三十行且包含复杂条件分支时,用zx重写以获得可读的JS逻辑和顶层await支持。
  • 需要批量处理大量文件并结合glob遍历与fs读写时,用zx将命令输出接入JS逻辑进行后续解析。
  • 编写CI辅助步骤需调用多个CLI并解析其stdout时,利用zx的.nothrow处理预期失败并返回明确退出码。
  • 脚本中需要调用API并处理复杂字符串插值时,通过环境变量管理敏感配置以避免硬编码密钥。

适合人员

  • 被Bash引号折磨的后端工程师,诉求是用JS重写超长部署脚本以降低维护成本。
  • 维护CI流水线的开发运维,诉求是调用多CLI并解析输出,需严格错误处理与退出码控制。
  • 编写批量处理工具的全栈开发者,诉求是结合glob和fs将命令行输出无缝接入自定义JS逻辑。
  • 编写自动化脚本调用外部API的技术专家,诉求是通过环境变量安全注入配置并避免命令注入风险。