-
只能使用JavaScript来实现,Shell脚本也不能例外
- 时间:2024-06-24 来源:zoc7RcITctunhMtq7EzA 人气:
大家好,我是秋风。 【x】【n】【x】今天我们来讨论一个非常厉害的项目——zx,在一个月内增长了15000个star,并成为了2021年度最受欢迎项目排行榜的第一名。这个东西到底是什么?我们可以从官方网站的介绍中了解到,这是一个可以更便捷地撰写脚本的工具。写更好脚本的工具不仅仅是 Bash,很多人在编写脚本时通常会选择更便利的编程语言。JavaScript 是一个完美的选择,使用标准的Node.js库在使用前需要额外的麻烦。zx软件包为child_process提供了实用的封装,转义参数并提供了明智的默认值。
Bash用于脚本编写非常出色,但通常人们会选择更便捷的方式编写脚本,比如使用像JavaScript这样的编程语言。在使用 Node.js 之前需要执行许多附加操作,例如安装包、引入库等。然而在使用 Node.js 之前需要进行许多额外的步骤,如安装包、引入库等。而 zx 提供了更多便捷的功能并简化了对 child_process 的封装,因此可以直接调用一些命令。透过阅读简介和描述,我们可以了解到虽然Bash很好用,但没有Node.js简洁。尽管编写 Node.js 很容易,但在使用之前仍然有一些繁琐的步骤。zx不具备前两种方式的劣势,它能够简化复杂操作,提供简单便利的使用体验。在进一步了解zx之前,我们先来梳理一下前面提到的一些概念,了解这些概念可以帮助我们更好地撰写脚本。Shell、Shell脚本、Bash、zx、Node首先讲述一下什么是Shell,Shell的中文意思是外壳,是指连接操作内核的壳层。Shell是一个广泛用于命令行操作的软件,狭义上指的是Bash(Bash全称为 Bourne Again SHell,是Linux标准的默认Shell,基于Bourne Shell,并吸收了C Shell和Korn Shell);广义上则包括图形界面。
因此Shell是一个宽泛的概念,包括Bash等命令行工具,使用这些工具编写的脚本称为Shell脚本;而Node是一种编程语言,可用于编写js文件执行一些命令,zx是基于Node开发的工具,也可通过编写脚本来执行命令。我用图表展示了他们之间的关系,并且用红色字体突出了标题的概念。
脚本能完成哪些任务?
的基础工作主要包括重复操作、数据格式处理、数据导入导出,以及简单小工具的开发和环境配置等等。列举一些特定的实例,如:下载视频:https://www.jianshu.com/p/0a013fa5a250。下载音乐:https://binaryify.github.io/NeteaseCloudMusicApi/#/。统计字数:https://geek-docs.com/shell/shell-examples/the-shell-counts-the-number-of-lines-words-and-characters-in-the-file.html。自动签到:https://github.com/RWoxiN/Qiandao。功能繁多,无法一一列举。你熟练掌握的操作可以帮助你提高效率,而不熟悉的操作则可以帮助你进步。谁可以使用?哪些人能够使用
?这个脚本不仅能够协助开发人员,还能够帮助那些非开发人员。很多人都喜欢在个人博客上撰写文章,可以使用WordPress快速建立博客。下面以Shell脚本为例,通过脚本一键安装WordPress,具体内容请参考:https://gist.github.com/dessibelle/2666478。另外,在上面的讨论中介绍了脚本的概念,以及脚本如何帮助我们。既然脚本功能强大且种类繁多,为什么 zx 一推出就受到欢迎呢?我们来看一个实际例子,使用了zx、Node和Shell(Bash)三种脚本,来批量压缩音视频文件。音频功能的实现主要包括四个步骤:\n1. 遍历当前目录;\n2. 检测当前文件类型;\n3. 执行音频压缩脚本。\n首先,让我们来看一下三种不同脚本语言中如何实现遍历当前目录的方法:\nBash:\n#!/bin/bash使用/bin/bash来循环遍历(ls)出来的文件列表,然后进行操作。Node中导入fs模块,使用fs.readdirSync('./')来获取目录列表,再进行循环处理。而在zx中,通过(await $`ls`).stdout.split('\n')来获取目录列表,然后进行处理。可以看出Bash和zx有相似之处。然而,zx 比Node 更省去了导入模块的代码。
的优点:zx = Bash > Node
接着我们再来看一下对当前文件类型进行判断的三种脚本方式:
在Bash中,如果test -f $file,那么filename=$(basename $file);如果"${file##*.}"x = "mp4"x,则...;如果"${file##*.}"x = "mp3"x,则...。星空体育登录入口
在Node和zx中,如果(dirs[i] && !...fs.如果(statSync(source).isDirectory()) 如果(source.endsWith(".mp4")) 如果(source.endsWith(".mp3")) 在Shell脚本中编码非常简洁,但对于不经常使用的人来说,经常会遇到一些问题,比如 if 语句的格式非常严格,判断方式比较特殊,还有字符串操作很繁琐。
优势节点 = zx > Bash
最后运行音频压缩脚本:
Bash... ffmpeg -i $file -r 30 -c copy -c:v libx264 -vf scale=720:-2 "${filename%%.*}-30-720".mp4; ...
节点
常量 { spawn } = require('child_process'); 函数 运行(command) { 返回 新的 Promise((决,在这段代码中,逻辑是先检查一下输入的指令,然后使用spawn方法来执行指令,最后监听执行结果的输出。当数据到达时,将其传递给控制台日志输出:cmd.stderr.on('data',(数据)=>console.log(`stdout:${data}`));数据=>\n{{{{{{{{{{控制台.错误(`错误:${data}`);}}}}}});\ncmd.on('close' (code) => { console.log(`子 进程 退出 代码为 ${code}`); rev(); }); }) } ... 等待 执行(["ffmpeg", "-i", source ,-r","30","-c", "copy","-c:v", "libx264", "-vf 使用zx能够达到和Shell一样的简洁程度,例如: ... `ffmpeg -i ${file} -r 30 -c copy -c:v libx264 -vf scale=720:-2 ${file.replace(".mp4","")}-30-720.mp4`; 将文件转换为720p分辨率的视频。 通过使用内置的 Node.js 包,可以显著减少整体代码量。在Node中,需要编写一些额外的代码,比如执行run命令等等。Bash的优点 > Node\n易学程度\n代码简洁度\nShell 难度 简洁性\nNode 简易 繁琐\nzx 简易 简洁\nBash操作起来很顺手。用四个字总结,"简单方便",你是否被zx所吸引呢?
星空体育网站
星空体育手机版
星空体育网页版
星空体育官方版 星空体育入口 星空体育网站