命令行上的input在node.js中分析为process.argv的哪一点?

我写了一个采用命令行input的应用程序,但input不是来自bash或任何其他shell。 我的意思是,我通过另一种方式获得用户input,并最终得到一个string。 如果这个input是像正常那样通过命令行来的,那么节点会神奇地将命令行参数parsing到process.argv一个合适的数组中。

乍一看,复制这种行为似乎很简单,因为它只是str.split(' ')吗? 那么不太好。 argv魔术对input进行了一些预处理,确保像"hello there"这样的事情由于引号而最终成为一个数组项而不是两个。 可能还有其他的东西,它构build这个数组,我不知道。

我不是试图通过反复试验来重复这个逻辑,而是想知道你们中的任何一个人是否可以指出我发生这种逻辑的地方。 我不知道在哪里节点项目这个process.argv数组被定义。 我试图通过源search,但我不知道我真的在找什么。 任何人都可以指出我的逻辑在哪里? 我想复制它,以便我可以确信input被parsing的方式完全相同的shell/节点会。

更新:

我所需要的就是数组parsing。 我不需要string中的任何文本以任何其他方式解释。 我只想取一个string,并将其拆分成与node.argv相同的数组。 我只是希望find这个parsing逻辑,要么复制它,要么将其移植到JavaScript中。

一旦我有了数组,我通过一个选项parsing器库( yargs , 乐观 分子)运行它。 选项parsing器不理解stringinput,只有一个数组。 如果我想在process.argv传递,这很方便,但是如果我需要将string自己转换为数组,则不是那么方便。

你所指的处理通常来自一个shell,比如bash ,而且远不是微不足道的。 这发生 NodeJS被调用之前 ; 也就是说,它是由即将执行NodeJS的shell发生的。

目前还不完全清楚你想要做什么,但是如果你input的信息是来自可信任的用户,那么你可以使用child_process.exec运行命令,该命令将命令传递给shell进行解释。 有关详细信息,请参阅http://nodejs.org/api/child_process.html#child_process_child_process_exec_command_options_callback ,其中包括使用glob扩展和pipe道的示例。

但是,如果命令有可能不被信任(例如,也许你不想允许pipe道?),那么你最好定义一个受限制的可接受的语法,然后parsing它。

我正在寻找类似的东西,我正在考虑在输出参数的subprocess中执行另一个脚本,并捕获它。

args bash脚本被命名为“args”,简单地说:

 #!/usr/bin/env node console.log(JSON.stringify(process.argv)); 

主bash脚本(在同一个目录中)看起来像这样:

 var exampleString = "foo bar 'blah blah'"; var exec = require('child_process').exec; exec(__dirname+'/args '+exampleString, function(error, stdout, stderr){ var args = JSON.parse(stdout); // args now split console.log(args); }); 

哪个给你:

 [ 'node', '/Users/.../args', 'foo', 'bar', 'blah blah' ] 

这对我有用,但我还没有尝试过呢。