
用 JS 写 Shell 脚本5 分钟跑通第一个 zx 自动化脚本【免费下载链接】zxA tool for writing better scripts项目地址: https://gitcode.com/GitHub_Trending/zx/zx部署脚本写到第 20 步还在 bash 里堆和反斜杠转义试试 zx——一个用 JavaScript 写 shell 脚本的工具在.mjs文件里写$\command这样的语句再用zx 命令直接执行输出自动变回可用的字符串。zx 是什么为什么你能直接上手一句话定位zx 把 Node.js 的child_process包了一层好用的壳专门用来写跨平台的 shell 脚本。它替你处理了三件最烦人的事——参数转义、跨平台差异、输出解析其余的按你熟悉的 JS 写法来就行。你不需要什么背景。会写const x await fetch(...)这种程度的 JS 就够bash 只要求认识常见命令这一级。运行环境方面项目 README 的兼容性列表写明Linux、macOS、Windows 均可JS 运行时支持 Node.js 12.17.0、Bun 1.0.0、Deno 1.x/2.x脚本可以是 CJS 或 ESM、JS 或 TS。换句话说你的机器上大概率已经具备运行条件。快速上手装好并跑起第一个脚本安装在你任意一个项目目录里执行npm install zx新建脚本比如hello.mjs第一行是 shebang后面直接写 JS#!/usr/bin/env zx const date await $date echo(今天是 ${date})执行zx hello.mjs。也可以chmod x hello.mjs后直接./hello.mjs。整个过程中你不需要 import 任何东西——$、echo、fetch、cd这些函数装好即可用。如果 VS Code 里想要自动补全加一行import zx/globals即可。功能与场景速览zx 能帮你解决哪些问题如果你想拿命令输出继续写逻辑直接const branch await $git branch --show-current得到的是ProcessOutput取.stdout、.exitCode都行再拼进下一条命令时会自动用 stdout 并去掉换行。如果你想让多步任务并行跑await Promise.all([$任务A, $任务B])就行不用自己拼后台进程再wait。如果你希望脚本读起来像文档把它写成.md文件zx 你的脚本.md会按顺序执行其中所有js/ts/bash代码块其余文字原样保留——详见 docs/markdown.md。如果参数里带空格或特殊字符比如带的文件名照常写${name}插入即可zx 会自动转义这是它的默认行为而不是可选项。如果要在 Windows 上跑PowerShell 的引号规则不同用$.quote quotePowerShell一行切换即可脚本主体不用改。核心的$命令实现可以看 src/core.ts想理解转义和输出捕获的行为时值得翻一翻。避坑手册常见报错与处理方式现象手动给参数加了引号命令行为不对甚至注入了额外命令。原因${...}里的内容 zx 已经自动转义并加引号再手动包一层属于画蛇添足官方文档明确警告这可能导致注入。 动作直接写await $\mkdir ${name}不加任何引号。现象某条命令失败后整个脚本直接抛异常崩了。原因这是设计行为——非零退出码会抛出ProcessOutput。 动作用try/catch包住从捕获的对象里读.exitCode和.stderr再决定重试或退出。现象ls ${./**/*.md}匹配不到任何文件。原因${...}对一切内容做转义通配符也被当普通字符了。 动作用内置的glob()先展开成文件数组再插入const files await glob(./**/*.md)。现象${~/downloads}报找不到目录。原因~在${...}内不会被展开。 动作改用os.homedir()拼接或者把~写在${...}外面如$\ls ~/Downloads。现象脚本在跑但屏幕上没输出不知道它干了什么。原因默认只打印 stderrstdout 和命令回显都不显示。 动作脚本开头加$.verbose true即可看到每条命令及其输出反过来嫌吵就$.quiet true。最后提醒一句边界zx 的 CLI 支持执行远程脚本参数以https://开头时下载即跑这类操作前先通读代码、确认来源可信——它用的是你的账号权限执行真实命令别跑看不懂的东西。下一步跑通之后往哪走仓库的 examples/ 目录里有现成的小脚本并行任务、定时备份 GitHub、交互式终端挑一个改成你自己的场景是今天最划算的一件事。装法变体、TypeScript 支持、ProcessOutput的完整字段这些细节直接翻 docs/ 里的 setup、typescript、process-output 几篇即可不用在这里展开。今天可以先只做一步把你某个现成部署流程里的一个子步骤比如检查分支并打印版本号改写成三行 zx 脚本跑一遍。【免费下载链接】zxA tool for writing better scripts项目地址: https://gitcode.com/GitHub_Trending/zx/zx创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考