child-process exec cwd,没有设置当前工作目录

时间:2018-04-04 06:14:08

标签: javascript node.js child-process

我正在构建一个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,然后执行命令并且命令从节点文件所在的当前目录执行。 如果有人有任何想法,请帮助。

3 个答案:

答案 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)

您可能想要引用您的here的类似用例。您也可以继续使用shelljs来捕获路径。