Как получить доступ к значению переменной оболочки из Node.js? - PullRequest
0 голосов
/ 16 октября 2018

Допустим, есть переменная key1 и ее значение 123

key1=123

, поэтому, когда я запускаю команду в среде linux echo $key1, я получаю вывод как 123.

enter image description here

Теперь у меня есть следующее задание gulp.

const child_process = require('child_process');
....
gulp.task('printKeyValue', function() {
    var value1 = child_process.execSync('echo $key1');
    console.log(value1.toString().trim());
});

Здесь я пытаюсь получить доступ к значению переменной linux изnodejs с помощью дочернего процесса

Но когда я запускаю следующую задачу gulp, я не получаю желаемый вывод.

npm run gulp -- printKeyValue

Вместо этого я получаю вывод как $key1, а не 123.

См. Скриншот ниже

enter image description here

Другие команды, такие как ls & pwd in gulpзадание дает желаемый результат.

Может кто-нибудь помочь с этим или предложить альтернативный способ?

1 Ответ

0 голосов
/ 16 октября 2018

Вы не экспортируете переменную.Когда вы просто делаете

key1=123

, переменная не распространяется на подпроцессы.Он будет доступен в вашем текущем процессе bash, поэтому вы сможете увидеть его при наборе echo $key1, но он не будет унаследован процессом node.Как говорит man bash:

Когда должна выполняться простая команда, отличная от встроенной функции или функции оболочки, она вызывается в отдельной среде выполнения, которая состоит из следующего.Если не указано иное, значения наследуются от оболочки.

  • [...]

  • переменные оболочки и функции, отмеченные для экспорта, а такжес переменными, экспортированными для команды, переданными в среде

Вам нужно либо определить переменную как экспортированную

export key1=123

, либо пометить существующую переменную дляэкспортируйте

key1=123
export key1

или запустите ваш узел с измененной средой, либо с помощью встроенной в bash возможности сделать это

key1=123 node code.js

, либо с помощью утилиты /usr/bin/env:

env key1=123 node code.js

Как только переменная будет правильно передана процессу узла, она будет доступна как в process.env.key1, так и как $key1 в дочернем процессе.

EDIT: Я только что заметил, что вы фактически дали командуты бежишь;это не имеет значения, та же логика применяется для каждого исполняемого файла, node или npm или чего-либо еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...