使用shelljs设置环境变量

时间:2018-03-19 21:18:55

标签: node.js environment-variables shelljs

我正在尝试使用shelljs

在节点中设置一个env变量

所以这是psudo代码:

const shell = require('shelljs');

shell.exec('export MM=2');
shell.exec('echo $MM');

但这不会打印出MM

的值

有关如何使用export通过节点设置env变量的任何建议(执行bash命令)?

1 个答案:

答案 0 :(得分:4)

您是否熟悉环境变量的工作原理?维基百科文章在这里有一个很好的高级摘要:https://en.wikipedia.org/wiki/Environment_variable

关于环境变量的一个更独特的事情是它们如何跨越流程边界。每个进程都有自己的一组环境变量。您可以在自己的过程中修改环境变量而不会出现任何问题。每当您生成(fork + exec)子进程时,它都会继承您的环境变量集。如果您是子进程(获得exec ed的进程),则无法设置父进程的环境变量。

您现在可能已经意识到,如果进程A创建子进程B,并且B修改了环境变量,则A将看不到更改。

所以shell专门处理这个问题。 export是shell内置的。换句话说,bash(或任何其他shell)实际上不会通过调用二进制文件来执行export命令。相反,shell将理解export需要做什么并直接执行,调整shell进程中的环境变量,而不是在单独的子进程中。然后,任何进一步运行的命令都将从shell继承(更新的)环境变量。

你需要这样做。

shelljs为此提供了一个单独的对象env

shell.env["MM"] = "2";