我正在构建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。如果有人有任何想法,请帮助。
您粘贴的代码段应起作用,CWD应根据您的值更改当前目录。
尽管我怀疑您明确设置Env。
"env": {
"PATH": process.env.PATH + ':' + /opt/somepath,
"LANG": "en_US.UTF-8"
}
您可以覆盖ENV的所有其他价值,但是您只是在设置中设置路径并在Env中。覆盖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中设置路径,并保留Env中的设置值。
我遇到了同样的问题。这就是我将其整理出来的
exec('cd newDirectoryName && someOtherCommandForThatDirectoru' , (error, stdout, stderr)=>{...}
这样,您就可以在命令上完成所有操作。
可能会有所帮助。谢谢
您可能需要在此处参考您的类似用例。您也可以继续使用ShellJ捕获路径。