几天狂增 1.1 万 Star!谷歌这个脚本工具必须推荐一波

zx:简化脚本编写
zx是一款由Google推出的脚本编写工具,它通过提供便捷的API来简化Node.js脚本的编写过程。支持使用JavaScript语法编写shell命令,同时提供丰富的内置函数如fetch、question等,极大地提高了开发效率。

【导语】:zx 是一个更方便、更友好帮助开发者写脚本的工具。有 Google “爸爸”的光环加持,该工具短短几天在 GitHub 上就破万 Star 了。

简介

Bash 很好,但是在编写脚本的时候,人们通常会选择一种更方便的编程语言,JavaScript 就是一个很完美的选择。但是标准的 Node.js 库在使用之前需要许多额外的操作,比如安装、引入库等,zx 提供一个包装器 child_process,用于转义参数并提供合并的默认值。

#!/usr/bin/env zx  

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}`  

项目地址是:https://github.com/google/zx

安装使用

  • 安装
npm i -g zx  
  • 简单使用。将编写的脚本放在 .mjs 后缀的文件中,或者使用 .js 后缀,但是需要 void async function () {...}() 对脚本进行包装。

    1. 脚本需要包含以下文件头:
#!/usr/bin/env zx  
  1. 运行脚本(需要先添加执行权限):
chmod +x ./script.mjs  
./script.mjs  

// 或者使用这个命令  
zx ./script.mjs  

常用命令

使用child_process包中提供的exec函数可以把字符串当做命令执行,并返回Promise<ProcessOutput>对象。

let count = parseInt(await $`ls -1 | wc -l`)  
console.log(`Files count: ${count}`)  

例如,并行上传文件:

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

如果执行脚本返回非0状态码,将会抛出ProcessOutput对象:

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

抛出ProcessOutput对象结构如下:

class ProcessOutput {  
  readonly exitCode: number  
  readonly stdout: string  
  readonly stderr: string  
  toString(): string  
}  
  • cd(),修改工作路径:
cd('/tmp')  
await $`pwd` // outputs /tmp   
  • fetch(),对node-fetch包的包装:
let resp = await fetch('http://wttr.in')  
if (resp.ok) {  
  console.log(await resp.text())  
}  
  • question(),对readline包的包装:
type QuestionOptions = { choices: string[] }  

function question(query: string, options?: QuestionOptions): Promise<string>  

用法:

let username = await question('What is your username? ')  
let token = await question('Choose env variable: ', {  
  choices: Object.keys(process.env)  
})  
  • chalk包,不需要导入就可以直接用
console.log(chalk.blue('Hello world!'))  
  • fs包,需要导入就可以直接用
let content = await fs.readFile('./package.json')  

Promisified默认被引入了,相当于写了以下代码:

import {promises as fs} from 'fs'  
  • os包,需要导入就可以直接用
await $`cd ${os.homedir()} && mkdir example`  
  • zx可以从其他脚本导入:
#!/usr/bin/env node  
import {$} from 'zx'  
await $`date`  
  • 传递环境变量:
process.env.FOO = 'bar'  
await $`echo $FOO`  
  • 执行远程脚本:
zx https://medv.io/example-script.mjs  

开源前哨 日常分享热门、有趣和实用的开源项目。参与维护 10万+ Star 的开源技术资源库,包括:Python、Java、C/C++、Go、JS、CSS、Node.js、PHP、.NET 等。

内容概要:本文提出了种基于融合鱼鹰算法和柯西变异的改进麻雀优化算法(OCSSA),用于优化变分模态分解(VMD)的参数,进而结合卷积神经网络(CNN)与双向长短期记忆网络(BiLSTM)构建OCSSA-VMD-CNN-BILSTM模型,实现对轴承故障的高【轴承故障诊断】基于融合鱼鹰和柯西变异的麻雀优化算法OCSSA-VMD-CNN-BILSTM轴承诊断研究【西储大学数据】(Matlab代码实现)精度诊断。研究采用西储大学公开的轴承故障数据集进行实验验证,通过优化VMD的模态数和惩罚因子,有效提升了信号分解的准确性与稳定性,随后利用CNN提取故障特征,BiLSTM捕捉时间序列的深层依赖关系,最终实现故障类型的智能识别。该方法在提升故障诊断精度与鲁棒性方面表现出优越性能。; 适合人群:具备定信号处理、机器学习基础,从事机械故障诊断、智能运维、工业大数据分析等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①解决传统VMD参数依赖人工经验选取的问题,实现参数自适应优化;②提升复杂工况下滚动轴承早期故障的识别准确率;③为智能制造与预测性维护提供可靠的技术支持。; 阅读建议:建议读者结合Matlab代码实现过程,深入理解OCSSA优化机制、VMD信号分解流程以及CNN-BiLSTM网络架构的设计逻辑,重点关注参数优化与故障分类的联动关系,并可通过更换数据集进步验证模型泛化能力。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值