NodeJS устанавливает переменную среды для exec

#node.js

#node.js

Вопрос:

Я хочу установить переменную среды при запуске программы через child_process.exec . Возможно ли это?

Я попытался установить env подобное:

 exec('FOO', {'FOO': 'ah'}, function(error, stdout, stderr) {console.log(stdout, stderr, error);});
  

но в полученном сообщении говорилось, что FOO не существует.

Ответ №1:

Вы должны передать объект options, который включает ключ env, значение которого само по себе является объектом пар ключ-значение.

 exec('echo $FOO', {env: {'FOO': 'ah'}}, function (error, stdout, stderr) 
{
    console.log(stdout, stderr, error);
});
  

Комментарии:

1. Любой, кто использует это, должен принять к сведению, что указание переменных среды таким образом заменяет весь набор переменных среды, включая любые PATH , которые могли бы существовать в противном случае. Итак, если вы попытаетесь установить переменную env и внезапно получите ошибки о том, что команда, которую вы пытаетесь выполнить, не найдена, вот почему. Это совсем не ясно из документации и заставило меня немного почесать голову. Если вы хотите добавить переменные env и не зависеть от платформы, вы можете сделать копию process.env , применить к ней свои изменения и передать ее child_process.exec .

2. Вы также можете обновить process.env direclty. Пример: process.env["PATH"] = path.delimiter process.cwd() path.sep "node_modules" path.sep ".bin"

3. дополняя ответ @DanielSmedegaardBuus, вы можете использовать для него оператор распространения. env: { ...process.env, 'FOO': 'ah'}

Ответ №2:

Основываясь на ответе @DanielSmedegaardBuus, вам необходимо добавить свой env var к существующим, если вы хотите их сохранить:

 exec(
  "echo $FOO", 
  { env: { ...process.env, FOO: "ah" } }, 
  function (error, stdout, stderr) {
    console.log(stdout, stderr, error);
  }
);
  

Комментарии:

1. Да, это то, что я должен был написать : D Меня зовут DanielSmedegaardBuus, и я одобряю это сообщение : D