javascript - node怎么执行多条linux命令,即如何获取执行后的linux环境

查看:108
本文介绍了javascript - node怎么执行多条linux命令,即如何获取执行后的linux环境的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

【】node怎么执行多条linux命令,即如何获取执行后的linux环境
【】例如,我需要执行两条命令,cd /home/user 和 ls -a
【】问题是,使用exec分别执行这两条命令的时候,是相当于从当前目录下执行的。也就是说执行第二条的时候,ls的目录并不是第一条执行后的环境,不是在/home/user下执行的。
【】需求,怎么获取第一条命令执行后的环境?(我想用node实现类似linux下expect的功能)
【】备注:我知道可以把命令都整合成一条字符串,如cd /home/user; ls -a,但是这样并不是动态交互的过程,如果需要实现异步的操作,就会有问题。例如用ssh登陆某服务器?

解决方案

//原理:
//子进程并不是bash进程,进程只是一个空间,用来运行某个软件。其中bash就是其中一个软件。
//spawn函数返回的,就是这个软件的上下文。可以向该上下文发生命令。执行程序。
var spawn = require('child_process').spawn;//子进程操作模块
// var subProcess = spawn("/bin/bash");//使用子程序去运行某个软件。在这里就是运行bash软件。并获取其上下文。
var subProcess = spawn("bash");//使用子程序去运行某个软件。在这里就是运行bash软件。并获取其上下文。

//消息监听,监听子进程的输出。并在主进程中打印出来。
function onData(data) {
    process.stdout.write(data);//获取当前进程,并在输出中写入某内容。关键是process表示的是当前进程
}
//整个进程的错误监听
subProcess.on('error', function () {
    console.log("error");
    console.log(arguments);
});
//设置消息监听
subProcess.stdout.on('data', onData);
subProcess.stderr.on('data', onData);
subProcess.stdin.on('end', function () {
    subProcess.stdout.write('stdin End');
});
//向子进程发送命令
subProcess.stdin.write('cd / \n');   // 写入数据
subProcess.stdin.write('pwd \n');   // 写入数据
subProcess.stdin.write('ls');   // 写入数据
subProcess.stdin.end();

这篇关于javascript - node怎么执行多条linux命令,即如何获取执行后的linux环境的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆