2016-08-09 7 views
0

私は複数のサブフォルダを持つappフォルダを持っています。これらのフォルダをループして、各フォルダのシェルコマンドを実行しようとしています。これは私がこれまで持っているものである:私は私の端末に期待する何Gruntのループ内でシェルコマンドを実行するには?

grunt.registerTask('deploy', function() { 

    var done = this.async(); 
    var exec = require('child_process').exec; 

    // Start deployment 
    grunt.log.write('Starting deployment...').ok(); 

    // Read all subdirectories from the app folder 
    grunt.file.expand("./app/*").forEach(function (dir) { 

     // Get folder name 
     var functionName = dir.split('/')[2]; 

     exec('echo ' + functionName, { 
      cwd: dir 
     }, function(error, stdout, stderr) { 
      grunt.log.ok(functionName+' deployed.'); 
      done(); 
     }); 

    }); 

}); 

は、各フォルダ名をプリントアウトすることですが、私が得たすべてはこのように、exec関数でコールバックです:

Running "deploy" task 
Starting deployment...OK 
>> testA deployed. 
>> testB deployed. 

私は何が間違っているのか分かりません。

答えて

0

このコマンドの出力は、コールバックに渡される変数stdoutにあります。ターミナルは自動的には印刷されません。

+0

これは意味がありますが、まだ正しく動作していません。私は3つのフォルダを持っている場合、ときどきそれらのうちの2つだけが、グラントが終了する前に処理されるので、何かが非同期部分にも間違っています。 – passatgt

+0

コマンドコールバックで 'done()'を呼び出すと、最初のタスクの後にタスクが完了したとみなされます。 –

関連する問題