我正在构建一个node.js应用程序。 为了执行命令,我正在使用子进程。 我必须在执行命令之前更改CWD(当前工作目录)。所以我有如下代码。
const exec = require('child_process').exec;
let opts = {
"maxBuffer": 1024 * 5000,
"timeout": toolTimeout,
"cwd": /opt/somepath,
"env": {
"PATH": process.env.PATH + ':' + /opt/somepath,
"LANG": "en_US.UTF-8"
}
};
exec(command, opts, function(error, stdout, stderr) {
}
但是上面的设置不起作用,因为它仍然没有改变CWD,然后执行命令并且命令从节点文件所在的当前目录执行。 如果有人有任何想法,请帮助。
答案 0 :(得分:3)
我有同样的问题。这是我如何整理出来的
exec('cd newDirectoryName && someOtherCommandForThatDirectoru' , (error, stdout, stderr)=>{...}
这样你就可以通过命令完成所有这些工作。
可能会有所帮助。感谢
答案 1 :(得分:2)
您粘贴的代码段应该有效,CWD应根据您的值更改当前目录。
虽然我怀疑你正在明确设置env。
"env": {
"PATH": process.env.PATH + ':' + /opt/somepath,
"LANG": "en_US.UTF-8"
}
你可以覆盖env的所有其他值,但你只是在env中设置PATH和LANG。覆盖env可能有害,因为它可能包含其他几个变量和值,这可能最终导致任何相关命令失败。
尝试如下所示。
let opts = {
"maxBuffer": 1024 * 5000,
"timeout": toolTimeout,
"cwd": /opt/somepath,
"env": process.env
};
opts.env.PATH = opts.env.PATH + ':' + nlu_plmtool_dir;
exec(command, opts, function(error, stdout, stderr) {
}
通过执行此操作,您将在env中设置PATH并在env中保留已设置的值。
答案 2 :(得分:0)