使用JavaScript语法编写Shell脚本
需求
Shell 是一个用 C 语言编写的程序,常常被运维人员用于linux服务器上的维护工作,也常被开发人员/运维人员用来写一些程序自动化、智能化的构建、打包、部署等方面的工作。
Shell脚本在Linux上运行时,可以直接运行linux命令,需要添加系统执行权限,因而具有比Node、Java等其他脚本更加底层的能力。
但是对于写过shell脚本的人来说,尤其是写前端、Java等偏应用型的开发人员来说,其语法规则、编码能力就不是那么友好了,且学习成本较高。zx
因此诞生!
关于zx
zx
是由Google 的前端程序员开源的基于 JavaScript 实现的 Shell 解释器,对 child_process 进行了默认包装,对参数进行了转译而且提供了合理的默认值。可以很方便的让我们使用前端熟悉的 JavaScript 语法来编写 Shell 脚本
安装zx
要求 Node.js 版本 >= 16.0.0
yarn add -g zx
// or
pnpm i -g zx
// or
npm i -g zx
脚本示例
#!/usr/bin/env zx
// 在mjs文件中,使用的是ES规范,可以在顶层直接使用 await
await $`cat package.json | grep name`
let branch = await $`git branch --show-current`
await $`dep deploy --branch=${branch}`
await Promise.all([
$`sleep 1; echo 1`,
$`sleep 2; echo 2`,
$`sleep 3; echo 3`,
])
let name = 'foo bar'
await $`mkdir /tmp/${name}`
脚本运行示例
chmod +x ./zxShell.mjs
./zxShell.mjs
# or
zx ./zxShell.mjs