从Node.js中设置全局环境变量
我正在尝试从node.js应用程序中设置全局环境变量 目标是:从Node.js中设置全局环境变量,node.js,bash,spawn,env,Node.js,Bash,Spawn,Env,我正在尝试从node.js应用程序中设置全局环境变量 目标是: 重新启动应用程序时,仍应设置环境变量 打开新外壳时,它应该是可用的 如果可能:重新启动时,与1相同 它应该可以在Linux、Mac OS X上运行(并且需要windows的备用SET命令) 以下是我所做的: var setEnv = require('child_process') .spawn('export GLOBALVARNAME='+my.value,{ stdio: 'inherit'
var setEnv = require('child_process')
.spawn('export GLOBALVARNAME='+my.value,{
stdio: 'inherit',
env: process.env
});
但这会导致
{ [Error: spawn export GLOBALVARNAME=foobar ENOENT]
code: 'ENOENT',
errno: 'ENOENT',
syscall: 'spawn export GLOBALVARNAME=foobar',
path: 'export GLOBALVARNAME=foobar',
spawnargs: [] }
我没有在Windows上测试这一点,但在Mac OS X(和Linux)上,bash上正确的命令是export GLOBALVARNAME=value
。对于Windows,正确的命令应该是SET GLOBALVARNAME=value
-不是吗
因此,主要的问题是:手动导出GLOBALVARNAME=foobar有什么问题?
export
不是一个独立的命令,而是一个shell内置命令,用于为当前shell进程及其子进程设置环境变量,并在设置后分叉
不能为不是当前进程后代的进程设置环境变量。在Linux下,没有系统环境变量
在Linux下,应该在生成应用程序的init脚本或systemd单元中设置变量。如果希望它在交互式用户shell中可用,则应在/etc/profile
或/etc/profile.d
.尝试一下:
我认为子进程不可能更改父进程的进程环境。所以我真的认为不可能使用child\u进程
示例代码:
var shell = require('shelljs');
shell.exec('export ENV_VARIABLE=ABRACADABRA');
正如其他答案所指出的,剥离和更改环境变量基本上是一个简单的过程。您可以更改当前进程及其子进程的环境,也可以更改新进程的环境。编辑
/etc/profile
将对@Hmlth所说的任何新流程进行更改
如果要更改当前流程的环境,这是直接的:
process.env.YOUR_VAR = 'your_value';
你是对的,使用child_进程是不起作用的。思想导出使事物全球化,其效果与父shell无关…它在windows中也不起作用。shelljs的主要目标是多平台,我认为它是一个独立的命令。。。这很糟糕。所以我需要打开一个文件并写入其中。该死演示如何访问您的环境,而无需进行炮击。它也适用于写操作。要了解为什么它会给您
enoint
签出