如何将字符串解析为child_process.spawn的相应参数?

时间:2014-05-06 06:27:15

标签: node.js parsing command-line child-process

我希望能够获取命令字符串,例如:

some/script --option="Quoted Option" -d --another-option 'Quoted Argument'

并将其解析为我可以发送到child_process.spawn的内容:

spawn("some/script", ["--option=\"Quoted Option\"", "-d", "--another-option", "Quoted Argument"])

我发现的所有解析库(例如最小化等)通过将其解析为某种选项对象等来做太多。我基本上想要相当于Node首先创建process.argv

这似乎是原生API中令人沮丧的漏洞,因为exec接受了一个字符串,但并不像spawn那样安全地执行。现在我通过使用:

来解决这个问题
spawn("/bin/sh", ["-c", commandString])

但是,我并不希望这与UNIX如此强烈联系(理想情况下它也适用于Windows)。 HALP?

1 个答案:

答案 0 :(得分:11)

标准方法(无库)

您不必将命令字符串解析为参数,child_process.spawn上有一个名为shell的选项。

options.shell

如果是true,则在shell中运行命令 在UNIX上使用/bin/sh,在Windows上使用cmd.exe

实施例

let command = `some_script --option="Quoted Option" -d --another-option 'Quoted Argument'`

let process = child_process.spawn(command, [], { shell: true })  // use `shell` option

process.stdout.on('data', (data) => {
  console.log(data)
})

process.stderr.on('data', (data) => {
  console.log(data)
})

process.on('close', (code) => {
  console.log(code)
})