我正在尝试从我的node.js应用程序中设置一个全局环境变量。
目标是:
这是我做的:
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
- 不是吗?
所以主要的问题是:手册工作有什么问题export GLOBALVARNAME=foobar
?
答案 0 :(得分:3)
export
不是一个独立的命令,而是一个内置的shell,它为当前shell进程设置环境变量,并在设置它们之后对其子进行分叉。
您不能为不是当前进程后代的进程设置环境变量。在Linux下,没有系统环境变量这样的东西。
在Linux下,您的变量应该在生成应用程序或systemd单元的init脚本中设置。如果您希望它在交互式用户shell中可用,则应在/etc/profile
或/etc/profile.d
答案 1 :(得分:3)
正如其他答案所指出的,炮轰和更改环境变量基本上是NO-OP。要么您想要更改当前进程及其子进程的环境,要么您想要为新进程更改它。正如@Hmlth所说,编辑/etc/profile
将对任何新流程进行更改。
如果您想要更改当前流程的环境,这很简单:
process.env.YOUR_VAR = 'your_value';
答案 2 :(得分:2)
尝试一下:
<强> https://www.npmjs.com/package/shelljs 强>
我认为子进程无法更改父进程的环境。所以我真的不认为可以使用child_process
。
示例代码:
var shell = require('shelljs');
shell.exec('export ENV_VARIABLE=ABRACADABRA');