从Node.js中设置全局环境变量

6 bash env spawn node.js

我试图从我的node.js应用程序中设置一个全局环境变量.

目标是:

  1. 重新启动APP时,仍应设置环境变量
  2. 打开一个新shell时,它应该是可用的
  3. 如果可能:重新启动时,与1相同.
  4. 它应该适用于Linux,Mac OS X(并且需要Windows的备用SET命令)

这是我做的:

var setEnv = require('child_process')
        .spawn('export GLOBALVARNAME='+my.value,{
          stdio: 'inherit',
          env: process.env
        });
Run Code Online (Sandbox Code Playgroud)

但这导致了

{ [Error: spawn export GLOBALVARNAME=foobar ENOENT]
  code: 'ENOENT',
  errno: 'ENOENT',
  syscall: 'spawn export GLOBALVARNAME=foobar',
  path: 'export GLOBALVARNAME=foobar',
  spawnargs: [] }
Run Code Online (Sandbox Code Playgroud)

我没有在Windows上对此进行测试,但在Mac OS X(和Linux)上,bash上的正确命令是export GLOBALVARNAME=value.对于Windows,正确的命令应该是SET GLOBALVARNAME=value- 不是吗?

所以主要问题是:手动工作出了export GLOBALVARNAME=foobar什么问题?

小智 3

export不是一个独立的命令,而是一个 shell 内置命令,它为当前 shell 进程及其设置后分叉的子进程设置环境变量。

您无法为不是当前进程后代的进程设置环境变量。而在Linux下,是没有系统环境变量这样的东西的。

在 Linux 下,您的变量应该在生成您的应用程序的 init 脚本中或在 systemd 单元中设置。如果您希望它在交互式用户 shell 中可用,则应将其设置为/etc/profile/etc/profile.d