我编写了一个接受命令行输入的应用程序,但输入不是来自 bash 或任何其他 shell。我的意思是我通过另一种方式获得用户输入,最后得到一个字符串。如果此输入像正常情况一样通过命令行传入,那么 Node 会神奇地将命令行参数解析为 process.argv
中的适当数组。
乍一看,复制此行为似乎很简单,因为它只是 str.split(' ')
的问题,对吗?好吧,不完全是。 argv
魔术对输入进行了一些预处理,确保诸如 "hello there"
之类的内容由于引号而最终成为一个数组项而不是两个。构建这个数组可能还有其他我不知道的事情。
与其尝试通过反复试验来复制此逻辑,我想知道是否有任何人可以指出此逻辑发生的位置。我不知道这个 process.argv
数组在 Node 项目中的什么地方被定义。我尝试搜索源代码,但我不知道我真正在寻找什么。谁能指出这个逻辑在哪里?我想复制它,这样我就可以确信输入的解析方式与 shell/Node 的解析方式完全相同。
更新:
我想要的只是数组解析。我不需要以任何其他方式解释字符串中的任何文本。我只想获取一个字符串并将其拆分为 Node 向我公开的与 process.argv
完全相同的数组。我只是希望找到这个解析逻辑并将其复制或移植到 JavaScript 中。
获得数组后,我通过选项解析器库(yargs,optimist 的一个分支)运行它。选项解析器不理解字符串输入,只理解数组。如果我试图传入 process.argv
,这很方便,但如果我需要自己将字符串转换为数组,这就不那么方便了。
最佳答案
您所指的处理通常来自 shell,例如bash
,而且绝非微不足道。这发生在 甚至调用 NodeJS 之前;也就是说,它发生在执行 NodeJS 的 about shell 上。
目前还不完全清楚您要做什么,但如果您的输入是来自受信任的用户,那么您可以使用 child_process.exec
运行命令,这将命令传递给 shell 进行解释。参见 http://nodejs.org/api/child_process.html#child_process_child_process_exec_command_options_callback有关详细信息,包括使用 glob 扩展和管道的示例。
但是,如果命令有任何可能不受信任(例如,也许您不想允许管道?),那么您最好定义一个受限的可接受语法并仅对其进行解析。
关于javascript - 命令行的输入在什么时候被解析成node.js中的process.argv?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20573058/