node.js - 在 Node 的 spawn 中运行 bash/shell block

标签 node.js bash shell child-process

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

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}`)
});

最佳答案

spawn() 涉及 shell,因此为了让它执行 shell 命令,您必须显式调用 shell 可执行文件并将 shell 命令作为参数传递:

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

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

关于node.js - 在 Node 的 spawn 中运行 bash/shell block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38045360/

相关文章:

javascript - 从各个模块获取单独的导出

node.js - 检查 libpam header 是否可用

linux - 仅当输出发生变化时才从控制台提取信息

macos - 使用 shell 脚本删除派生数据

shell - 有没有办法自动删除tmp文件夹中的文件?

php - 无法使用 PHP 运行 shell 脚本文件

jquery - 将 jQuery 与 Jade 结合使用

node.js - 如何向redis服务器发出post请求

linux - Bash 脚本从第二个 bash 脚本获取变量

linux - 使用 find -exec linux 命令运行二进制文件