<返回更多

shell很难写?快用JS写shell脚本吧

2021-08-09    Owen大前端时代
加入收藏

shell脚本是一个命令语言,面向的是操作系统执行。如果写过shell脚本的话,应该体会过编写过程的痛苦。因为shell并不是一个编程语言,并不支持常见的数组,JSON等数据结构,也不支持面向对象编程的开发方法,因此对开发人员很不友好。

 

目前针对这种情况,大家一般会用shell调用node执行JS脚本,真正的处理逻辑放在JS脚本中处理。现在谷歌推出了 ZX NPM包,它能够用JS编写shell脚本。

 

那如何使用呢?

 

1.全局安装zx

npm install -g zx

安装完后,在终端中输入 zx 命令检查安装是否成功。

shell很难写?快用JS写shell脚本吧

 

2.创建一个简单的脚本

新建zx脚本文件:test.mjs

#!/usr/bin/env zx
const branch = await $`git branch --show-current`
console.log(`Current branch: ${branch}`)

第一行是指定脚本的执行器。

$ 是内置的函数,能够执行命令并配合 await 返回执行结果。其他的写法都和JS毫无差别。

3.执行脚本

zx ./test.mjs

或者:

chmod +x ./test.mjs
./test.mjs

控制台就会输出当前的分支。

上面只是小试牛刀,zx 的强大远不止如此。由于 zx 在内部实现了 Bash 的解释器,所以可以执行全部的shell命令。另外 zx 还内置很多nodejs模块,比如 fs, os,fetch等。所以可以直接在脚本中使用这些模块。

另外作为TS编写的库,全部的JS语法都能够支持。包括但不限于 数组,Promise,class等。

下面再举一个例子:

let resp = await fetch('http://wttr.in')
if (resp.ok) {
  console.log(await resp.text())
}

let hosts = [...]
await Promise.all(hosts.map(host =>
  $`rsync -azP ./src ${host}:/var/www`  
))

try {
  await $`exit 1`
} catch (p) {
  console.log(`Exit code: ${p.exitCode}`)
  console.log(`Error: ${p.stderr}`)
}

 

总结一下,zx 的最大优点是结合了Bash和JAVAScript,解决了shell脚本复杂逻辑编程的问题。同时也让对shell不熟悉的开发者也能用JS完成shell脚本的开发,而且更加灵活高效。

 

如果你还有更多问题,可以参考NPM仓库 zx 包的介绍,或者访问其github地址。

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>