【发布时间】:2014-06-22 15:12:39
【问题描述】:
我希望能够取一个命令字符串,例如:
some/script --option="Quoted Option" -d --another-option 'Quoted Argument'
并将其解析成我可以发送给child_process.spawn的内容:
spawn("some/script", ["--option=\"Quoted Option\"", "-d", "--another-option", "Quoted Argument"])
我发现的所有解析库(例如 minimist 等)都通过将其解析为某种选项对象等来太多。我基本上想要任何 Node 的等价物首先创建process.argv。
这似乎是本机 API 中的一个令人沮丧的漏洞,因为 exec 接受一个字符串,但执行起来不如 spawn 安全。现在我正在使用以下方法解决这个问题:
spawn("/bin/sh", ["-c", commandString])
但是,我不希望它与 UNIX 如此紧密地联系在一起(理想情况下它也可以在 Windows 上运行)。哈普?
【问题讨论】:
-
创建process.argv的不是node.js,而是你使用的shell解释器。所以它是系统依赖的。 bash 的解释会与 Windows cmd 不同。
-
@Michael:您找到任何解决方案了吗?我现在也面临同样的问题。
-
@Krasimir nope,从未找到明确的答案。我暂时还在用
/bin/sh。 -
如果您希望将命令行语句拆分为 args,那么 string-argv 或 spawn-args 可能会有所帮助。
标签: node.js parsing command-line child-process