gpt4 book ai didi

node.js - 如何从nodejs子进程(在windows和linuxish中)获取cwd(当前工作目录)

转载 作者:IT老高 更新时间:2023-10-28 21:55:30 26 4
gpt4 key购买 nike

我正在尝试通过 nodejs 运行一个脚本:

cd ..
doSomethingThere[]

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

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

或至少:

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);
});

更新:如果要检索 child 的 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));

关于node.js - 如何从nodejs子进程(在windows和linuxish中)获取cwd(当前工作目录),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15939380/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com