#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