Run block of bash / shell in node's spawn

Tho*_*ggi 2 bash shell child-process node.js

我正在写一个命令行实用程序,我需要stdout来写TTY或使用{stdio: 'inherit'}我一直都在使用的TTY ,exec但这不会减少它。我需要一种产生程序的方法来执行以下下面的echo命令。我知道spawn会使用给定的命令启动一个子进程,并且您传入参数,但是我需要它仅采用行分隔的命令字符串。这就是我目前要提供给执行人员的内容。这可能吗?

const spawn = require('child_process').spawn
const child = spawn(`
echo "alpha"
echo "beta"
`)

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

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

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

mkl*_*nt0 5

spawn()没有涉及外壳,所以要想拥有它执行shell命令,你必须调用解释器可执行程序明确,并通过shell命令(S)作为参数

const child = spawn('/bin/sh', [ '-c',  `
echo "alpha"
echo "beta"
` ])
Run Code Online (Sandbox Code Playgroud)

请注意,我使用/bin/sh而不是/bin/bash为了使您的命令在更广泛的[Unix-like]平台上运行。
所有主要的POSIX类外壳程序都通过该-c选项接受命令字符串。