使用 shelljs 设置环境变量
Set environment variable with shelljs
我正在尝试使用 shelljs 在节点中设置环境变量
伪代码如下:
const shell = require('shelljs');
shell.exec('export MM=2');
shell.exec('echo $MM');
但这不会打印出 MM
的值
关于如何使用 export
(执行 bash 命令)通过节点设置环境变量有什么建议吗?
您是否熟悉环境变量的一般工作原理?维基百科文章在这里有一个很好的高级摘要:https://en.wikipedia.org/wiki/Environment_variable
关于环境变量的一个更独特的事情是它们如何跨进程边界运行。每个进程都有自己的一组环境变量。您可以在自己的进程中修改环境变量而不会出现任何问题。每当您生成 (fork
+ exec
) 一个子进程时,它都会继承您的环境变量集。如果您是子进程(得到 exec
ed 的进程),则不能设置父进程的环境变量。
您现在可能意识到,如果进程 A 创建子进程 B,并且 B 修改了环境变量,A 将看不到更改。
所以 shells 专门处理这个问题。 export
是一个 shell-built 中的。换句话说,bash
(或任何其他 shell)实际上不会通过调用二进制文件来执行 export
命令。相反,shell 将了解 export
需要做什么并直接执行,调整 shell 进程中的环境变量,而不是在单独的子进程中。然后获取 运行 的任何进一步命令将从 shell.
继承(更新的)环境变量
你也需要这样做。
shelljs提供了一个单独的对象,env
,为此:
shell.env["MM"] = "2";
我正在尝试使用 shelljs 在节点中设置环境变量
伪代码如下:
const shell = require('shelljs');
shell.exec('export MM=2');
shell.exec('echo $MM');
但这不会打印出 MM
关于如何使用 export
(执行 bash 命令)通过节点设置环境变量有什么建议吗?
您是否熟悉环境变量的一般工作原理?维基百科文章在这里有一个很好的高级摘要:https://en.wikipedia.org/wiki/Environment_variable
关于环境变量的一个更独特的事情是它们如何跨进程边界运行。每个进程都有自己的一组环境变量。您可以在自己的进程中修改环境变量而不会出现任何问题。每当您生成 (fork
+ exec
) 一个子进程时,它都会继承您的环境变量集。如果您是子进程(得到 exec
ed 的进程),则不能设置父进程的环境变量。
您现在可能意识到,如果进程 A 创建子进程 B,并且 B 修改了环境变量,A 将看不到更改。
所以 shells 专门处理这个问题。 export
是一个 shell-built 中的。换句话说,bash
(或任何其他 shell)实际上不会通过调用二进制文件来执行 export
命令。相反,shell 将了解 export
需要做什么并直接执行,调整 shell 进程中的环境变量,而不是在单独的子进程中。然后获取 运行 的任何进一步命令将从 shell.
你也需要这样做。
shelljs提供了一个单独的对象,env
,为此:
shell.env["MM"] = "2";