7

Let's say there is a variable key1 and its value is 123

key1=123

so when I run the command in linux environment echo $key1, I get output as 123.

enter image description here

Now I have the following gulp task.

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

Here, I'm trying to access value of linux variable from nodejs by using Child Process

But when I run the following gulp task, I don't get the desired output.

npm run gulp -- printKeyValue

Instead I get output as $key1 and not 123.

See below screenshot

enter image description here

Other commands like ls & pwd in gulp task gives the desired output.

Can some one please help on this or suggest an alternate way?

5

1 Answer 1

11

You are not exporting the variable. When you just do

key1=123

the variable is not propagated to subprocesses. It will be available in your current bash process, so you can see it when you type echo $key1, but it will not get inherited by the node process. As man bash says:

When a simple command other than a builtin or shell function is to be executed, it is invoked in a separate execution environment that consists of the following. Unless otherwise noted, the values are inherited from the shell.

  • [...]

  • shell variables and functions marked for export, along with variables exported for the command, passed in the environment

You need to either define the variable as exported

export key1=123

or mark an existing variable for export

key1=123
export key1

or launch your node with the modified environment, either via the bash innate capability to do so

key1=123 node code.js

or using /usr/bin/env utility:

env key1=123 node code.js

Once the variable is properly passed to the node process, it will be available both in process.env.key1 and as $key1 in a child process.

EDIT: I just noticed, you actually gave the command you're running; it does not matter, the same logic goes for every executable, whether node or npm or anything else.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.