*
正在由 shell 扩展,并且参数child_process.spawn
是作为字符串传递的,因此永远不会正确扩展。这是一个限制spawn
。您可以改为尝试child_process.exec
,它将允许 shell 正确扩展任何通配符:
var exec = require("child_process").exec;
var child = exec("doSomething ./myfiles/*.csv",function (err,stdout,stderr) {
// Handle result
});
如果您出于某种原因确实需要使用,也许您可以考虑在创建子进程之前spawn
在 Node 中使用类似node-glob的库自己扩展通配符文件模式?
更新
在 Joyent Node 核心代码中,我们可以观察到一种在 shell 中调用任意命令的方法,spawn
同时保留完整的 shell 通配符扩展:
https://github.com/joyent/node/blob/937e2e351b2450cf1e9c4d8b3e1a4e2a2def58bb/lib/child_process.js#L589
这是一些伪代码:
var child;
var cmd = "doSomething ./myfiles/*.csv";
if ('win32' === process.platform) {
child = spawn('cmd.exe', ['/s', '/c', '"' + cmd + '"'],{windowsVerbatimArguments:true} );
} else {
child = spawn('/bin/sh', ['-c', cmd]);
}