如何连续创建节点child_process exec

dot*_*hlu 7 child-process node.js

怎么exec连续?比如ls之后cd

我试过了

exec = require('child_process').exec;
exec('cd ~/', 
  function(){
    exec('ls'),
    function(err, stdout, stderr){
      console.log(stdout); // this logs current dir but not ~/'s
    }
  }
)

exec('cd ~/').exec('ls', function(err, stdout, stderr){
  console.log(stdout);
})//this also fails because first exec returns a ChildProcess Object but not itself.
Run Code Online (Sandbox Code Playgroud)

Emi*_*rea 10

这是不可能的,因为exec和spawn会创建一个新进程.但有一种方法可以模拟这一点.您可以使用exec启动进程并同时执行多个命令:在命令行中,如果要在同一行执行3个命令,则可以编写:

cmd1 & cmd2 & cmd3
Run Code Online (Sandbox Code Playgroud)

因此,所有3个命令都在同一进程中运行,并且可以访问先前执行的命令修改的上下文.让我们举个例子,你想执行cd ../然后执行dir并查看以前的目录列表.在cmd你写道:

cd../ & dir
Run Code Online (Sandbox Code Playgroud)

从节点js,您可以使用exec启动进程并告诉它启动另一个将评估内联脚本的节点实例:

var exec = require('child_process').exec;
var script = "var exec = require('child_process').exec;exec('dir',function(e,d,er){console.log(d);});";
script = '"'+script+'"';//enclose the inline script with "" because it contains spaces
var cmd2 = 'node -e '+script;
var cd = exec('cd ../ &'+cmd2,function(err,stdout,strerr)
{
    console.log(stdout);//this would work
})
Run Code Online (Sandbox Code Playgroud)

如果您只想更改当前目录,则应查看相关文档http://nodejs.org/api/child_process.html#child_process_child_process_exec_command_options_callback