如何从一个nodejssubprocess获得cwd(当前工作目录)(在windows和linuxish中)

我试图通过nodejs运行一个脚本:

cd .. doSomethingThere[] 

但是,要做到这一点,我需要执行多个subprocess,并在这些进程之间传递环境状态。 我想要做的是:

 var exec = require('child_process').exec; var child1 = exec('cd ..', function (error, stdout, stderr) { var child2 = exec('cd ..', child1.environment, function (error, stdout, stderr) { }); }); 

或者至less:

 var exec = require('child_process').exec; var child1 = exec('cd ..', function (error, stdout, stderr) { var child2 = exec('cd ..', {cwd: child1.process.cwd()}, function (error, stdout, stderr) { }); }); 

我怎样才能做到这一点?

以父目录开始孩子cwd:

 var exec = require('child_process').exec; var path = require('path') var parentDir = path.resolve(process.cwd(), '..'); exec('doSomethingThere', {cwd: parentDir}, function (error, stdout, stderr) { // if you also want to change current process working directory: process.chdir(parentDir); }); 

更新 :如果你想检索孩子的cwd:

 var fs = require('fs'); var os = require('os'); var exec = require('child_process').exec; function getCWD(pid, callback) { switch (os.type()) { case 'Linux': fs.readlink('/proc/' + pid + '/cwd', callback); break; case 'Darwin': exec('lsof -a -d cwd -p ' + pid + ' | tail -1 | awk \'{print $9}\'', callback); break; default: callback('unsupported OS'); } } // start your child process // note that you can't do like this, as you launch shell process // and shell's child don't change it's cwd: // var child1 = exec('cd .. & sleep 1 && cd .. sleep 1'); var child1 = exec('some process that changes cwd using chdir syscall'); // watch it changing cwd: var i = setInterval(getCWD.bind(null, child1.pid, console.log), 100); child1.on('exit', clearInterval.bind(null, i)); 

如果你想获得当前的工作目录,而不需要使用特定于操作系统的命令行实用程序,那么你可以使用“经过testing的”shelljs库来为你抽象这些东西,而在下面使用subprocess。

 var sh = require("shelljs"); var cwd = sh.pwd(); 

在这里,variablescwd保存你当前的工作目录,无论你在Linux,Windows还是freebsd。

只是一个想法,如果你知道subprocess的PID,并且安装了pwdx (很可能在linux上),那么你可以从节点执行该命令来获取subprocess的cwd。

我认为最好的办法是调用exec之间的options.cwd 。 在execcallbackthis.pwdthis.cwd可能会给你的实施的杠杆作用。