shell很难写?快用JS写shell脚本吧
shell脚本是一个命令语言,面向的是操作系统执行 。如果写过shell脚本的话,应该体会过编写过程的痛苦 。因为shell并不是一个编程语言,并不支持常见的数组,JSON等数据结构,也不支持面向对象编程的开发方法,因此对开发人员很不友好 。
目前针对这种情况,大家一般会用shell调用node执行JS脚本,真正的处理逻辑放在JS脚本中处理 。现在谷歌推出了 ZX NPM包,它能够用JS编写shell脚本 。
那如何使用呢?
1.全局安装zx【shell很难写?快用JS写shell脚本吧】npm install -g zx
安装完后,在终端中输入 zx 命令检查安装是否成功 。

文章插图
2.创建一个简单的脚本新建zx脚本文件:test.mjs
#!/usr/bin/env zxconst 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地址 。
推荐阅读
- AI什么缩写 aita缩写什么意思
- Postman RSA+Bate64验签
- 搭建MySQL主从实现Django读写分离
- Mysql手写脚本实现插入百万级随机测试数据
- EXCEL中通过VBA宏编写一个简易抽奖小工具
- 身份证件类型怎么填写?
- 自媒体小白也可以轻松写出爆款文:一篇78万+爆款文是如何产生的
- 新手怎么写标题才能避免违规
- 我为什么强烈推荐你写图文?而不是拍视频
- 同样是写作赚钱,写长篇网络小说和写自媒体文章哪个更容易变现?