javascript - 命令行的输入在什么时候被解析成node.js中的process.argv?

标签 javascript c++ c node.js shell

我编写了一个接受命令行输入的应用程序,但输入不是来自 bash 或任何其他 shell。我的意思是我通过另一种方式获得用户输入,最后得到一个字符串。如果此输入像正常情况一样通过命令行传入,那么 Node 会神奇地将命令行参数解析为 process.argv 中的适当数组。

乍一看,复制此行为似乎很简单,因为它只是 str.split(' ') 的问题,对吗?好吧,不完全是。 argv 魔术对输入进行了一些预处理,确保诸如 "hello there" 之类的内容由于引号而最终成为一个数组项而不是两个。构建这个数组可能还有其他我不知道的事情。

与其尝试通过反复试验来复制此逻辑,我想知道是否有任何人可以指出此逻辑发生的位置。我不知道这个 process.argv 数组在 Node 项目中的什么地方被定义。我尝试搜索源代码,但我不知道我真正在寻找什么。谁能指出这个逻辑在哪里?我想复制它,这样我就可以确信输入的解析方式与 shell/Node 的解析方式完全相同。

更新:

我想要的只是数组解析。我不需要以任何其他方式解释字符串中的任何文本。我只想获取一个字符串并将其拆分为 Node 向我公开的与 process.argv 完全相同的数组。我只是希望找到这个解析逻辑并将其复制或移植到 JavaScript 中。

获得数组后,我通过选项解析器库(yargsoptimist 的一个分支)运行它。选项解析器不理解字符串输入,只理解数组。如果我试图传入 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/

相关文章:

javascript - Three.js 去除内面

c++ - "[&](int i) "是否转换为 tbb 中的引用并行?

javascript - 在 Chrome 中拖放图像

c# - 从 C# 调用 C++ 模板函数

c++ - 重载插入运算符 : no operator found which takes a right-hand operand of type 'unsigned int' (or there is no acceptable conversion)

c - fread() 没有写入缓冲区

c - fork() 在 c 中使用 printf

从 Fortran 调用 GSL 例程 CQUAD

javascript - 如何使用 AngularJS 将 json 中的 url 超链接到同一 JSON 中的文本

javascript - 如何扩展 Google 应用脚本类