は*
シェルによって展開されておりchild_process.spawn
、引数は文字列として渡されるため、適切に展開されることはありません。の制限ですspawn
。代わりに試すことができますchild_process.exec
。これにより、シェルがワイルドカードを適切に展開できるようになります。
var exec = require("child_process").exec;
var child = exec("doSomething ./myfiles/*.csv",function (err,stdout,stderr) {
// Handle result
});
spawn
何らかの理由で本当に使用する必要がある場合は、子プロセスを作成する前に、node-glob のような lib を使用して Node でワイルドカード ファイル パターンを自分で拡張することを検討できますか?
アップデート
Joyent ノードのコア コードでは、spawn
完全なシェル ワイルドカード展開を保持しながら、シェルで任意のコマンドを呼び出すアプローチを確認できます。
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]);
}