儿童过程EXEC CWD,未设置当前工作目录



我正在构建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捕获路径。

最新更新