Установить глобальную переменную среды из Node.js
Я пытаюсь установить глобальную переменную среды из моего приложения node.js.
Цели:
- При перезапуске приложения переменная среды все равно должна быть установлена
- При открытии новой оболочки она должна использоваться
- Если возможно: при перезагрузке то же, что и 1.
- Он должен работать на Linux, Mac OS X (и нуждается в альтернативной команде SET для Windows)
Вот что я сделал:
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
?
3 ответа
Как указывалось в других ответах, выделение и изменение переменной среды - это в основном НО-ОП. Либо вы хотите изменить среду для текущего процесса и его дочерних процессов, либо вы хотите изменить его для новых процессов. редактирование /etc/profile
внесет изменения для любых новых процессов, как говорит @Hmlth.
Если вы хотите изменить среду для вашего текущего процесса, это просто:
process.env.YOUR_VAR = 'your_value';
export
это не отдельная команда, а встроенная оболочка, которая устанавливает переменную окружения для текущего процесса оболочки и его дочерних элементов, разветвленных после его установки.
Вы не можете установить переменную среды для процессов, которые не являются потомками текущего процесса. А в Linux нет такой вещи, как системная переменная окружения.
В Linux ваша переменная должна быть установлена в сценарии инициализации, который порождает ваше приложение, или в модуле systemd. Если вы хотите, чтобы он был доступен в интерактивных пользовательских оболочках, он должен быть установлен в /etc/profile
или же /etc/profile.d
,
Попробуйте это:
https://www.npmjs.com/package/shelljs
Я не думаю, что дочерний процесс может изменить среду процесса родителя. Поэтому я не думаю, что можно использовать child_process
,
Образец кода:
var shell = require('shelljs');
shell.exec('export ENV_VARIABLE=ABRACADABRA');