0

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

2016-12-30 提问
2 个回答
1

已采纳
//原理:
//子进程并不是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.on('close', (code) => { console.log(colors.blue(`子进程退出码:${code}`)); }); // 监听进程退出
//向子进程发送命令
subProcess.stdin.write('cd / \n');   // 写入数据
subProcess.stdin.write('pwd \n');   // 写入数据
subProcess.stdin.write('ls');   // 写入数据
subProcess.stdin.end();
0

给你一个nexpect的库,这个可能满足你的需求nexpect

撰写答案

推广链接