NodeJS 可以在节点child_process.spawn()中使用env变量吗?

iswrvxsc  于 2023-03-07  发布在  Node.js
关注(0)|答案(2)|浏览(326)

这个管用

cp.exec('echo $TEST', { env: { TEST: 'Hello World!'}) // Hello World"

但这并不

cp.spawn('echo', ['$TEST'], { env: { TEST: 'Hello World!' } } ) // $TEST

有没有办法在spawn args中使用env vars?

6ss1mwsb

6ss1mwsb1#

不可以,你不能像使用exec命令那样直接在spawn命令中使用环境变量。当使用spawn时,传递给命令的参数是作为一个字符串数组传递的,其中第一个元素是命令本身,其余的元素是参数。因此,在你的第二个例子中,正在执行的命令是字面上的“echo”,参数是“$TEST”。
要在spawn中使用环境变量,需要将它们作为options对象的env属性中的一个对象传递。

const cp = require('child_process');

const child = cp.spawn('bash', ['-c', 'echo $TEST'], { env: { TEST: 'Hello World!' } });

child.stdout.on('data', (data) => {
  console.log(`stdout: ${data}`);
});

child.stderr.on('data', (data) => {
  console.error(`stderr: ${data}`);
});

child.on('close', (code) => {
  console.log(`child process exited with code ${code}`);
});

在本例中,我们使用bash命令来执行echo命令,并传递值为“Hello World!"的环境变量TEST。$TEST变量随后由shell展开,输出应为“Hello World!"。注意,我们使用on方法将事件侦听器附加到子进程,以处理其输出和退出代码。

wfsdck30

wfsdck302#

const cp = require('child_process');

// make sure you have property shell set to true

const cmd = cp.spawn('echo', ['$TEST'], { env: { TEST: 'Hello World!' }, 
shell: true } );

cmd.stdout.on('data', (data) => {
    console.log(data.toString());
});

相关问题