node:运行shell的几种方式exec、spawn、shelljs

这篇具有很好参考价值的文章主要介绍了node:运行shell的几种方式exec、spawn、shelljs。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景

有时候我们需要在 node 上运行一些 shell 脚本,看了下大概有这几种方式:

  • 官方提供的API:exec
  • 官方提供的API:spawn
  • 第三方库:shelljs

今天我们挨个来试用一下

官方提供的API:exec

官方文档
运行命令:cat *.js bad_file | wc -l

const { exec } = require('child_process');
exec('cat *.js bad_file | wc -l', (error, stdout, stderr) => {
  if (error) {
    console.error(`exec error: ${error}`);
    return;
  }
  console.log(`stdout: ${stdout}`);
  console.log(`stderr: ${stderr}`);
});

这种写法要注意不接受外部输入的命令直接执行。

注意,命令执行的结果是通过 node 代码 console 出来的,否则不会有打印效果。

官方提供的API:spawn

运行命令:ls -lh /usr

const { spawn } = require('child_process');
const ls = spawn('ls', ['-lh', '/usr']);

ls.stdout.on('data', (data) => {
  console.log(`stdout: ${data}`);
});

ls.stderr.on('data', (data) => {
  console.log(`stderr: ${data}`);
});

ls.on('close', (code) => {
  console.log(`子进程退出码:${code}`);
});

如果有外部属于命令的需求,这种写法能避免,但是缺点也是写法比较繁琐。

第三方库:shelljs

官方文档文章来源地址https://www.toymoban.com/news/detail-441207.html

var shell = require('shelljs');

if (!shell.which('git')) {
  shell.echo('Sorry, this script requires git');
  shell.exit(1);
}

// Copy files to release dir
shell.rm('-rf', 'out/Release');
shell.cp('-R', 'stuff/', 'out/Release');

// Replace macros in each .js file
shell.cd('lib');
shell.ls('*.js').forEach(function (file) {
  shell.sed('-i', 'BUILD_VERSION', 'v0.1.2', file);
  shell.sed('-i', /^.*REMOVE_THIS_LINE.*$/, '', file);
  shell.sed('-i', /.*REPLACE_LINE_WITH_MACRO.*\n/, shell.cat('macro.js'), file);
});
shell.cd('..');

// Run external tool synchronously
if (shell.exec('git commit -am "Auto-commit"').code !== 0) {
  shell.echo('Error: Git commit failed');
  shell.exit(1);
}

到了这里,关于node:运行shell的几种方式exec、spawn、shelljs的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 常见的几种排序方式

    排序: 所谓排序,就是使一串记录,按照其中的某个或某些的大小,递增或递减的排列起来的操作 稳定性: 假定在待排序的记录序列中,存在多个具有相同的的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在

    2024年02月07日
    浏览(48)
  • python的几种输出方式

    1.输出百分比方法 2. print(f “{}”) 的用法 3. .format格式   4. 加号拼接(针对字符串) 扩展知识 -格式化输出 字符 含有 %s 字符串 %d 有符号十进制整数,%06d表示输出的整数显示位数字,不足的地方使用0补全 %f 浮点数,%.02f表示小数点后只显示两位 %% 输出%  %s:代表字符串的占

    2024年04月15日
    浏览(52)
  • 创建线程的几种方式

    线程和进程的区别: 进程是操作系统进行资源分配的最小单元。 线程是操作系统进行任务分配的最小单元,线程隶属于进程。 如何开启线程? 1、继承Thread类,重写run方法。 2、实现Runnable接口,实现run方法。 3、实现Callable接口,实现call方法。通过FutureTask创建一个线程,获

    2024年02月03日
    浏览(58)
  • redis的几种集群方式

    https://www.zhihu.com/people/pan-zhi-74-31 Redis集群介绍Redis集群一般有四种方式,分别为:主从复制、哨兵模式、Cluster以及各大厂的集群方案。在3.0版本之前只支持单实例模式,3.0之后支持了集群方式。在3.0之前各大厂为了解决单实例Redis的存储瓶颈问题各自推出了自己的集群方案,

    2024年02月05日
    浏览(36)
  • 串口监控的几种方式

    目录 方法1. 使用usb转TTL模块硬件监控; 方法2. 使用JLINK的SWD接口的串口收发脚进行硬件监控; 方法3. 使用虚拟串口进行软件监控; 方法1. 使用usb转TTL模块硬件监控; 方法2. 使用JLINK的SWD接口的串口收发脚进行硬件监控; 吃水不忘挖井人: Jlink v9虚拟串口功能,不用再单独购

    2024年02月06日
    浏览(46)
  • svg动画的几种方式

    最近在做的项目中有部分的svg需要做成动画,最开始的想法是转成gif,然后一看,啊,90M!!!实在不能忍,于是和设计妹纸一起研究起了svg动画,发现这玩意儿还是很好玩的,怎么让svg动起来,这是一个很有趣的话题。在目前的开发过程中,一共使用了三种方式,接下来就

    2024年02月14日
    浏览(42)
  • 解决跨域的几种方式

    利用 script 标签可以跨域加载资源的特性,通过动态创建一个 script 标签,然后将响应数据作为回调函数的参数返回,从而实现跨域请求资源。该方式只支持 GET 请求方式,且不支持发送 POST 等其它请求。 客户端代码: 服务端应返回如下格式的响应数据: 客户端创建一个 sc

    2024年02月09日
    浏览(57)
  • npm 下载的几种方式

    1.npm install moduleName 模块将会被安装到node_modules 目录下 不会把模块依赖写入devDependencies 或 dependencies 节点 运行npm i 初始化项目时不会自动下载 2.npm install --save moduleName 模块将会被安装到node_modules 目录下 会将模块依赖写入 dependencies 节点 运行npm i 初始化项目时会自动下载 运行

    2024年02月08日
    浏览(48)
  • 实现跨域的几种方式

    前后端的分离导致了跨域的产生  跨域的三要素:协议 域名 端口 三者有一个不同即产生跨域 例如: http ://www.csdn.com https ://www.csdn.com 由于协议不同,端口不同而产生跨域 注:http的默认端口80,https的默认端口443 跨域的解决方案 前端:webpack proxy,jsonp,ngix反向代理,webpac

    2024年02月13日
    浏览(47)
  • HTTP请求的几种方式

    HTTP(Hypertest Transfer Protocol)是用于传输像HTML这样的超文本文件的应用层协议。它被设计用于WEB浏览器端和WEB服务端的交互,但也有其它用途。HTTP遵循经典的client-server模型,客户端发起请求尝试建立连接,然后等待服务端的应答。HTTP是无状态协议,这意味着服务端在两次请求间

    2024年02月08日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包