Установить глобальную переменную среды из Node.js

Я пытаюсь установить глобальную переменную среды из моего приложения node.js.

Цели:

  1. При перезапуске приложения переменная среды все равно должна быть установлена
  2. При открытии новой оболочки она должна использоваться
  3. Если возможно: при перезагрузке то же, что и 1.
  4. Он должен работать на 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');
Другие вопросы по тегам