JS执行shell命令有什么方法,具体怎样做
Admin 2022-11-15 群英技术资讯 483 次浏览
先来了解一下shell是什么?
Linux/Unix中的shell,翻译是’壳’的意思;shell提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入操作系统的内核去执行。
1、命令行
用户直接在shell界面上执行shell命令,一行行书写,很少写出成套的程序来执行,所以称为命令行。
2、shell脚本
用户事先编写一个sh脚本文件,而后使用shell程序执行该脚本,这种方式,我们称shell编程。
依次来了解一下吧
介绍
child_process是node提供的一个子进程AP,具体可见官网、中文网关于此类api的介绍,对衍生shell及参数有非常详细的说明,下面列出两个常用的api
1. child_process.exec(command[, options][, callback])
command:要运行的shell命令
创建一个新的shell进程,然后执行command
2. child_process.execFile(file[, args][, options][, callback])
file:要运行的文件名称或路径,参数作为数组传入
直接将可执行的file创建为新进程;需要单独写.sh文件,可编写复杂逻辑,但在windows上使用时会有兼容问题(此外,还有child_process.spawn()等可供选择)
示例
const util = require('util'); const child_process = require(‘child_process'); // 调用util.promisify方法,返回一个promise,如const { stdout, stderr } = await exec('rm -rf build') const exec = util.promisify(child_process.exec); const appPath = join(__dirname, 'app'); const runClean = async function () { // cwd指定子进程的当前工作目录 这里的rm -rf build为删除指定目录下的一个文件夹 await exec(`rm -rf build`, { cwd: appPath }); await exec(`rm -rf test`, { cwd: appPath }); runClean();
介绍
shelljs是j基于nodeAPI的一个扩展,要引入插件:(npm地址);它比原生的child_process的兼容性更好,使用更灵活,这个插件的使用率很高。
Tips:
这个插件不仅可以调用.exec执行shell命令,也封装了一些快捷操作指令,具体使用文档请参考github地址。
cat 返回文件内容
Const mdres = shell.cat(‘*.md')
pwd 获取当前目录
const res = shell.pwd();
find 查找文件
find(‘src', ‘lib'); find([‘src', ‘lib']); // same as above find('.').filter(function(file) { return file.match(/.js$/); });
mkdir创建目录
mkdir('-p', ‘/tmp/a/b/c/d', ‘/tmp/e/f/g'); mkdir('-p', ['/tmp/a/b/c/d', ‘/tmp/e/f/g']); // same as above
示例
const shell = require(‘shelljs'); …… router.get('/update-git', function (req, res, next) { // 如果目录存在,执行Git pull操作,否则新建目录,执行git clone 操作 if (fs.existsSync(`${root}/${groupName}/${name}`)) { shell.exec('git pull', { cwd: `${root}/${groupName}/${name}`, }); } else { shell.exec(`git clone ${remote} ${name}`, { cwd: `${root}/${groupName}`, }); } …… });
鉴于上个例子,执行shell脚本操作git,其实对于复杂的git命令语句,写起来还是很不方便,最后介绍一个专为git设计的插件:simple-git(npm地址)
介绍
示例
以下为客户端项目通过ipc通信,处理git的请求
const simpleGit = require('simple-git/promise'); ...... // 执行客户端模拟的 simple-git 函数 ipcMain.handle('simple-git', async function (e, { projectPath, cmd, args }) { const git = simpleGit(projectPath); try { const res = await git[cmd](...args); return res; } catch (e) { console.error('执行 simple-git 命令时发生错误', { projectPath, cmd, args }, e); throw e; } });
上面介绍了shell的概念及三种js执行shell命令的方式(这里只列出了简单的命令,实际也可以根据需要编写.sh文件,传参相对路径,执行更复杂的shell脚本);总的来说,有以下几点:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
promise可以处于等待被赋值的等待态(pending),可以给出值并转换为解决态(resolved)。一旦promise被一个值resolve丢失,它将始终保持这个值不再被resolve丢失。
这篇文章小编给大家分享的是深拷贝和浅拷贝的内容,下文介绍了变量类型与存储空间、深拷贝和浅拷贝的概念和深拷贝和浅拷贝的常用方法等等,文中示例介绍的很详细,感兴趣的朋友可以了解看看,下面让我们一起来学习一下吧!
这篇文章主要介绍了vue组件是如何解析及渲染的?,帮助大家更好的理解和使用vue,感兴趣的朋友可以了解下
jquery求浏览器宽度的方法:1、利用“$()”方法获取浏览器窗口对象;2、利用width()方法来求指定浏览器对象的宽度,该方法用于返回或者设置匹配元素的宽度,语法为“$(window).width()”。
RPC是服务器和服务器之间的通信,它是基于TCP协议的,传输的数据是二进制,因此数据包要相比于http要小,同时解码数据更快。node中的net模块是创建RPC服务。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008