NodeJS设置exec的环境变量

52

我想在通过child_process.exec运行程序时设置一个环境变量。这可能吗?

我尝试像这样设置env

exec('FOO', {'FOO': 'ah'}, function(error, stdout, stderr) {console.log(stdout, stderr, error);});

但是得到的消息说 FOO 不存在。

2个回答

86

你需要传递一个选项对象,其中包括键 env ,其值本身是一组键值对的对象。

exec('echo $FOO', {env: {'FOO': 'ah'}}, function (error, stdout, stderr) 
{
    console.log(stdout, stderr, error);
});

96
使用此方法指定环境变量时,请注意,它将替换整个环境变量集,包括可能已存在的任何“PATH”。因此,如果您尝试设置一个环境变量,并突然出现有关未找到要执行的命令的错误,那么这就是原因。文档中根本没有明确说明这一点,让我困惑了一段时间。如果您想添加环境变量并保持跨平台兼容性,可以复制process.env,对其进行更改,并将其传递给child_process.exec - DanielSmedegaardBuus
6
你也可以直接更新 process.env。例如:process.env["PATH"] += path.delimiter + process.cwd() + path.sep + "node_modules" + path.sep + ".bin" - mems
4
补充@DanielSmedegaardBuus的答案,您可以使用扩展运算符。 env: { ...process.env, 'FOO': 'ah'} - Lazaro Fernandes Lima Suleiman

38

根据 @DanielSmedegaardBuus 的回答,如果您想要保留现有的环境变量,则需要将您的环境变量添加到已有的环境变量中:

const { exec } = require("child_process");

exec(
  "echo $FOO", 
  { env: { ...process.env, FOO: "ah" } }, 
  function (error, stdout, stderr) {
    console.log(stdout, stderr, error);
  }
);

6
是的,这就是我应该写的:D 我的名字是DanielSmedegaardBuus,我支持这个信息:D - DanielSmedegaardBuus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接