javascript - 子进程 exec cwd,未设置当前工作目录

标签 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,并且命令是从 Node 文件所在的当前目录执行的。 如果有人有任何想法,请提供帮助。

最佳答案

您粘贴的代码片段应该可以工作,CWD 应该根据您的值更改当前目录。

虽然我怀疑你明确设置了环境。

"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 中保留已经设置的值。

关于javascript - 子进程 exec cwd,未设置当前工作目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49644022/

相关文章:

c - 如何检查一个c程序的主函数从另一个c程序返回的值

Javascript 更改 li 标签文本

javascript - jQuery map 实时数据更新

javascript - react : Update component data/props after promise resolved

JavaScript: Node cron 和 Node 调度作业立即执行,而不是在将来执行

node.js - 尝试从 DocumentDb 删除文档时出现错误请求错误

javascript - 有没有办法从 child_process.execFile 生成的 python 脚本中获取 'live' 输出行,而无需每次都刷新 stdout?

javascript - 检查数据是否等于 Firebase 上的某些内容

javascript - 如何使用正则表达式拆分字母和数字以及插入符号后跟数字的字符串

具有交互式 child_process 产卵的 Node.js readline