iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >js执行shell命令的几种方式(Node)
  • 453
分享到

js执行shell命令的几种方式(Node)

2024-04-02 19:04:59 453人浏览 安东尼
摘要

目录前言调起shell的几种方式介绍(不限于这几种)1、child_process2、shelljs3、simple-git总结在做一个客户端基建项目的时候,多处需要用到JS调取命令

在做一个客户端基建项目的时候,多处需要用到JS调取命令行执行shell脚本,这里对shell命令、JS执行shell命令做一个简单的介绍和总结。

前言

一般在纯前端静态页面的项目中,是不需要JS调命令行操作的,通常在node项目,或者在Electron客户端项目中,可能会有这样的需求。(electron这个客户端框架本身就内置了node的很多方法)。因此下文针对的是有node层的项目如何执行shell。

先来了解一下shell是什么?

linux/Unix中的shell,翻译是’壳’的意思;shell提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入操作系统的内核去执行。

1、命令行
用户直接在shell界面上执行shell命令,一行行书写,很少写出成套的程序来执行,所以称为命令行。

2、shell脚本
用户事先编写一个sh脚本文件,而后使用shell程序执行该脚本,这种方式,我们称shell编程

调起shell的几种方式介绍(不限于这几种)

  • child_process:node的一个子进程api,可创建一个子进程用于执行命令行
  • shelljs: 基于node的api封装的一个shell执行插件
  • simple-git :基于node的ap封装的一个git命令执行插件

依次来了解一下吧

1、child_process

介绍

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();

2、shelljs

介绍
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}`,
    });
  }
……
});

3、simple-git

鉴于上个例子,执行shell脚本操作git,其实对于复杂的git命令语句,写起来还是很不方便,最后介绍一个专为git设计的插件:simple-git(npm地址)

介绍

  • 在项目中引入插件后,调用simple-git/promise可执行异步git操作,方便结合async/await使用
  • 它封装并支持了很多git的方法,比如clone、commit、status、pull等等,将cmd命令和参数,传入即可
  • 甚至可以用git.raw(),解析前端输入的git命令

示例

以下为客户端项目通过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脚本);总的来说,有以下几点:

  • shell是一种用户与内核进行交互操作的接口,我们通过执行shell命令行或者脚本可对本机文件、进程等进行操作。
  • js要执行shell命令,有很多方式,这里总结了几种基于node的方式:
    • child_process 原生nodeAPI,需根据需要选型
    • shelljs Node的一个扩展插件、兼容性好
    • simple-git:专为git命令打造的插件,轻量好用

 到此这篇关于js执行shell命令的几种方式(Node)的文章就介绍到这了,更多相关js执行shell命令内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: js执行shell命令的几种方式(Node)

本文链接: https://www.lsjlt.com/news/140460.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • js执行shell命令的几种方式(Node)
    目录前言调起shell的几种方式介绍(不限于这几种)1、child_process2、shelljs3、simple-git总结在做一个客户端基建项目的时候,多处需要用到JS调取命令...
    99+
    2024-04-02
  • python 执行 shell命令 的几
        os.system 最近有个需求就是页面上执行shell命令,第一想到的就是os.system os.system('cat /proc/cpuinfo') 但是发现页面上打印的命令执行结果 0 或者 1,当然不满足需求了。 ...
    99+
    2023-01-31
    命令 python shell
  • python中执行shell命令的几个方
    最近有个需求就是页面上执行shell命令,第一想到的就是os.system, 代码如下: os.system('cat /proc/cpuinfo') 但是发现页面上打印的命令执行结果 0或者1,当然不满足需求了。 尝试第二种方...
    99+
    2023-01-31
    几个 命令 python
  • node怎么执行cmd或shell命令
    这篇文章主要介绍“node怎么执行cmd或shell命令”,在日常操作中,相信很多人在node怎么执行cmd或shell命令问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”node怎么执行cmd或shell命令...
    99+
    2023-07-02
  • C++执行shell命令的多种实现方法
    目录1、system(执行shell 命令)2、popen(建立管道I/O)3、使用vfork()新建子进程,然后调用exec函数族在linux系统下,用C++程序执行shell命令...
    99+
    2024-04-02
  • mysql命令行下执行sql文件的几种方法
    目录第一种方法:未连接mysql数据库时第二方法:在已经连接数据库的情况下,此时命令提示符为mysql>,用MySQL的source命令导入SQL文件实战记录达到目的:通过命令...
    99+
    2024-04-02
  • node执行cmd或shell命令使用介绍
    目录引言一、node原生模块:child_process使用二、npm包:shelljs引言 在实现前端工程化的过程中,经常需要在一个js脚本中去执行其他node/npm或者其他sh...
    99+
    2024-04-02
  • python执行shell命令的方法
    os模块os.system方式:import os os.system('top') os.system('cat /proc/cpuinfo')说明这个调用相当直接,且是同步进行的,程序需要阻塞并等待返回。返回值是依赖于系统的,直接返回系...
    99+
    2023-01-31
    命令 方法 python
  • shell命令行模式中如何执行mongo命令
    小编给大家分享一下shell命令行模式中如何执行mongo命令,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! ...
    99+
    2024-04-02
  • Python中执行系统命令常见的几种方法
      Python中执行系统命令常见的几种方法:   (1)os.system   # 仅仅在一个子终端运行系统命令,而不能获取命令执行后的返回信息  # 如果再命令行下执行,结果直接打印出来  例如:  >>> impor...
    99+
    2023-01-31
    几种方法 命令 常见
  • Golang操作命令行的几种方式总结
    目录前言简单使用使用Shell执行命令简单封装Shell执行命令前言 在实际开发工作中,我们经常使用命令行进行日志分析、程序部署、debug程序等工作。在Linux下,|、grep、...
    99+
    2024-04-02
  • JavaJSch远程执行Shell命令的方法
    目录背景JSch简介使用示例需要注意的点参考文档背景 项目需求,需要远程 ssh 登录到某个节点执行 shell 命令来完成任务。对于这种需求,如果不用 java 程序,直接 lin...
    99+
    2024-04-02
  • Oracle执行Update语句的几种方式
    Oracle没有update from语法,可以通过四种写法实现同样的功能: 一、标准update语法(常用、速度可能最慢) 当更新的表示单个或者被更新的字段不需...
    99+
    2024-04-02
  • Java执行shell命令的实现
    目录前言一、案例场景原因解决方案二、拓展三、总结前言 java执行shell命令的方式有很多种,但是在应用的过程中,我们可能会遇上一些特殊的情况,导致执行脚本失败,不生效的场景。 一...
    99+
    2023-01-12
    Java执行shell
  • 详解Shell命令的执行顺序
    详解Shell命令的执行顺序?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Shell 从标准输入或脚本中读取的每一行称为管道(pipeline);它包含了一个或...
    99+
    2023-06-09
  • php 执行shell的方式
    system() 执行shell,并直接打印,也返回结果。 exec() 执行shell,返回执行结果,但不直接打印。 passthru() 将执行结果输出到标准设备,然后返回状态码。 popen()...
    99+
    2023-09-02
    php 开发语言
  • 命令行下执行TypeScript文件的三种方法
    TypeScript是一种开源编程语言,它是由微软开发和维护的。 TypeScript在语法上遵循JavaScript,但增加了更多的特性。它是JavaScript的超集。 为了执行...
    99+
    2022-11-13
    node.js 安装typescript 命令行执行TypeScript文件 TypeScript文件在命令行下运行方法 node.js执行TypeScript脚本
  • linux shell命令执行顺序控制方法
    本篇内容主要讲解“linux shell命令执行顺序控制方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“linux shell命令执行顺序控制方法”吧!&&命令1 &&...
    99+
    2023-06-09
  • Python调用shell的几种方式
    1.cmd = "some unix command" retcode = subprocess.call(cmd,shell=True)2.ssh = paramiko.SSHClient() ssh.connect(server, us...
    99+
    2023-01-31
    几种 方式 Python
  • python中执行DOS命令的3种方法小
    1. 使用os.system("cmd") 特点是执行的时候程序会打出cmd在Linux上执行的信息。 import os os.system("ls")   2. 使用Popen模块产生新的process 现在大部分人都喜欢使用Pop...
    99+
    2023-01-31
    种方法 命令 python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作