作为一名程序员,在平时的开发中肯定少不了一些命令行操作。当然,简单的命令大家都能搞定,但涉及到一些逻辑还是很头疼。ShellShell是用C语言编写的程序,是用户使用Linux的桥梁。它既是命令语言又是编程语言。Shell脚本(shellscript)是为shell编写的脚本程序,一般文件后缀为.sh。Shell编程和java、php编程一样,只要有可以编写代码的文本编辑器和可以解释执行的脚本解释器就可以了。Shell解释器有很多种,常见的有:sh——BourneShell。sh是Unix的标准默认shell。bash-BourneAgainShell。bash是Linux的标准默认shell。fish-智能且用户友好的命令行shell。xiki-使shell控制台更友好、更强大。zsh-强大的shell和脚本语言。一般在shell脚本的开头,#!告诉系统后面路径指定的程序就是解释脚本文件的shell解释器。#!被称为shebang。因此,你应该在shell中看到如下注释:指定sh解释器:#!/bin/sh指定bash解释器:#!/bin/bashzx当然,不管是哪种解释器,对于前端程序员来说都是他们不友好,有一定的学习成本。毕竟,我们只是“车兔仔”。开个玩笑,因为我们前端程序员的口号是:能用JS实现的,绝不能用其他语言实现。当然,我们也可以用Node.js执行一些简单的shell命令:const{execSync}=require("child_process");exec('gitdifforgin/master',(err,data)=>{if(err){console.log("失败",err);process.exit(1);}else{console.log("成功“,数据);}});但是这种体验比直接写Shell脚本要差的,我们需要手动用child_process打包,每次都要引入一些额外的依赖库,异常处理也比较麻烦,还要考虑翻译命令行参数。于是Google的前端程序员开源了一个基于JavaScript的Shell解释器。zx默认包装child_process,翻译参数并提供合理的默认值。我们使用前端熟悉的JavaScript语法编写Shell脚本非常方便:#!/usr/bin/envzxawait$`catpackage.json|grepname`letbranch=await$`gitbranch--show-current`await$`depdeploy--branch=${branch}`awaitPromise.all([$`sleep1;echo1`,$`sleep2;echo2`,$`sleep3;echo3`,])letname='foobar'await$`mkdir/tmp/${name}`使用安装(需要Node.js版本>=16.0.0):npmi-gzx推荐将脚本写到.mjs文件中,这样我们可以很方便的直接在顶层使用await,然后在文件开头声明如下shebang:#!/usr/bin/envzx通过以下方式运行脚本:chmod+x./script.mjs./script.mjs或Runwithzx:zx./script.mjs你可以试试:constlist=await$`ls-a`;控制台日志(列表);constname=awaitquestion('你叫什么名字?')console.log(`你的名字是:${name}`);所有功能($、cd、fetch等)都可以直接使用,无需任何导入。它还内置了很多方便的处理函数:$command:使用child_process的spawn制定指定的命令,并返回一个Promisecd():进入其他目录。(cd('/project'))fetch():发起方落请求question():读取用户输入,相当于对readline的封装sleep():等待一段时间,相当于对echo()的封装ofsetTimeout:大字文本,也可以直接使用console.log更多用法参考官方文档:https://github.com/google/zx。
