2016-08-09 1 views
0

Ich habe einen App-Ordner mit mehreren Unterordnern. Ich durchlaufe diese Ordner und versuche, einen Shell-Befehl für jeden Ordner auszuführen. Dies ist, was ich bisher:Wie man Shell-Befehle innerhalb einer Schleife in Grunt ausführt?

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(); 
     }); 

    }); 

}); 

Was ich in meinem Terminal erwarten würde, ist aus jedem Ordnernamen zu drucken, aber alles, was ich habe ist der Rückruf in der exec-Funktion, wie folgt aus:

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

Ich bin mir nicht sicher, was ich falsch mache.

Antwort

0

Die Ausgabe des Befehls kann in der Variablen stdout gefunden werden, die an Ihren Callback übergeben wird. Das Terminal wird nicht automatisch gedruckt.

+0

Danke, das macht Sinn, aber es funktioniert immer noch nicht richtig. Wenn ich 3 Ordner habe, werden manchmal nur zwei von ihnen verarbeitet, bevor der Grunt beendet wird, also stimmt auch etwas mit dem Async-Teil nicht. – passatgt

+0

Sie rufen 'done()' im Befehlsrückruf auf, so dass die Aufgabe nach der ersten ausgeführt wird. –

Verwandte Themen