我如何使节点child_process不断执行

如何连续exec ? 如cd后的ls

我试过了

 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. 

这是不可能的,因为exec和spawn会创build一个新的进程。 但是有一种方法来模拟这个。 你可以用exec来启动一个进程,并同时执行多个命令:在命令行中,如果你想在同一行执行3个命令,你可以这样写:

 cmd1 & cmd2 & cmd3 

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

 cd../ & dir 

从节点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 }) 

如果你只是想改变当前的目录,你应该检查有关的文档http://nodejs.org/api/child_process.html#child_process_child_process_exec_command_options_callback

如果你想先使用cd ,最好使用process.chdir('~/') 。 然后单个exec()将完成这项工作。

你可以像这样用cwd param调用exec:

 exec('ls -a', { cwd: '/Users/user' }, (err, stdout) => { if (err) { console.log(err); } else { console.log(stdout); } }) 

但要小心,cwd不理解'〜'。 你可以使用process.env.HOME来代替。