这个管用
cp.exec('echo $TEST', { env: { TEST: 'Hello World!'}) // Hello World"
但这并不
cp.spawn('echo', ['$TEST'], { env: { TEST: 'Hello World!' } } ) // $TEST
有没有办法在spawn args中使用env vars?
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方法将事件侦听器附加到子进程,以处理其输出和退出代码。
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()); });
2条答案
按热度按时间6ss1mwsb1#
不可以,你不能像使用exec命令那样直接在spawn命令中使用环境变量。当使用spawn时,传递给命令的参数是作为一个字符串数组传递的,其中第一个元素是命令本身,其余的元素是参数。因此,在你的第二个例子中,正在执行的命令是字面上的“echo”,参数是“$TEST”。
要在spawn中使用环境变量,需要将它们作为options对象的env属性中的一个对象传递。
在本例中,我们使用bash命令来执行echo命令,并传递值为“Hello World!"的环境变量TEST。$TEST变量随后由shell展开,输出应为“Hello World!"。注意,我们使用on方法将事件侦听器附加到子进程,以处理其输出和退出代码。
wfsdck302#