我试图在带有shelljs的节点中设置env变量
下面是psudo代码:
const shell = require('shelljs');
shell.exec('export MM=2');
shell.exec('echo $MM');但是这并没有输出MM的值。
对于如何使用export (执行bash命令)通过节点设置env变量有任何建议吗?
发布于 2018-03-19 21:33:19
您是否熟悉环境变量一般是如何工作的?维基百科的文章在这里有一个很好的高级摘要:variable
环境变量的一个更独特之处是它们如何跨流程边界运行。每个进程都有自己的一组环境变量。您可以在您自己的流程中修改环境变量,而不会出现任何问题。每当您生成(fork + exec)子进程时,它会继承您的一组环境变量。如果您是子进程(获得exec编辑的进程),则不能设置父进程的环境变量。
现在您可能意识到,如果进程A创建子进程B,而B修改环境变量,则A将不会看到更改。
所以贝壳会特别处理这个。export是内置的shell。换句话说,bash (或任何其他shell)不会通过调用二进制文件来实际执行export命令。相反,shell将理解export需要做什么,并直接这样做,调整shell进程中的环境变量,而不是在单独的子进程中。然后,运行的任何进一步命令都将从shell继承(更新的)环境变量。
你也要做同样的事。
为此,shelljs提供了一个单独的对象env:
shell.env["MM"] = "2";https://stackoverflow.com/questions/49372501
复制相似问题