2016-04-26 14 views
3

Ich versuche, einen Shell-Skript aus NodeJS CodeAusführen von Shell-Skript von Code

//test.sh 
wget http://nodejs.org/dist/v0.10.26/node-v0.10.26-linux-x64.tar.gz 
tar -zxvf node-v0.10.26-linux-x64.tar.gz 
mv node-v0.10.26-linux-x64 node-v0.10.26 
sudo cp -r node-v0.10.26 /usr/local/src 

//app.js 
var exec = require('child_process').exec; 
var execProcess = require("./exec_process.js"); 
execProcess.result("sh test.sh", function(err, response){ 
    if(!err){ 
     console.log(response); 
    }else { 
     console.log(err); 
    } 
}); 

//exec_process.js 
var exec = require('child_process').exec; 

var result = function(command, cb){ 
    var child = exec(command, function(err, stdout, stderr){ 
     if(err != null){ 
      return cb(new Error(err), null); 
     }else if(typeof(stderr) != "string"){ 
      return cb(new Error(stderr), null); 
     }else{ 
      return cb(null, stdout); 
     } 
    }); 
} 

exports.result = result; 

Nach der Ausführung app.js auszuführen, bin ich nicht in der Lage etwas in Reaktion zu sehen. Was mache ich hier falsch?

+0

die exec Variable in Ihrem app.js Ihre child_process Instanz ist? Ich benutze die Spawn-Methode. Wenn Sie eine Antwort sehen wollten, sollten Sie etwas an die Konsole senden. – jmugz3

+0

Haben Sie versucht, anstelle von 'sh test.sh' den Pfad relativ zum Arbeitsverzeichnis zu setzen. Überprüfen Sie auch Ihre ausführenden Berechtigungen. – jmugz3

+0

** sh test.sh ** funktioniert für mich – user4324324

Antwort

1

Der Code funktioniert perfekt für mich, ohne Änderungen. Wenn Sie sagen, dass Sie keine Antwort sehen können, hängt der Prozess? Was ist das Endergebnis? Ich bezweifle, dass der Sudo-Befehl im Skript einige Probleme verursacht. Kannst du das beseitigen und verändern? Ich habe keinen sudo-Zugriff, daher ist die Eingabeaufforderung fehlgeschlagen.

bash-4.1$ node app.js 
[sudo] password for gireesh: 
[sudo] password for gireesh: 
[sudo] password for gireesh: 
[Error: Error: Command failed: /bin/sh -c sh test.sh 
--2016-04-27 08:28:01-- http://nodejs.org/dist/v0.10.26/node-v0.10.26-linux-x64.tar.gz 
Resolving nodejs.org... 104.20.22.46, 104.20.23.46, 2400:cb00:2048:1::6814:172e, ... 
Connecting to nodejs.org|104.20.22.46|:80... connected. 
HTTP request sent, awaiting response... 200 OK 
Length: 5314716 (5.1M) [application/octet-stream] 
Saving to: ânode-v0.10.26-linux-x64.tar.gz.2â 

Einige Diagnoseschritte:

  • Drucken Sie das Kind-Objekt, nach dem excec Anruf. Dies wird die Prozessinformation drucken, die für das Kind relevant ist. Dadurch wird sichergestellt, dass das Kind gestartet wird.
  • Installieren Sie einen Child-Terminator-Callback, und drucken Sie eine Debug-Information darin. Dadurch wird sichergestellt, dass das Kind beendet ist.
  • Wenn das Problem weiterhin besteht, installieren Sie Child Stream Hooks. Dadurch wird sichergestellt, dass die Sofortdrucke in den Streams sofort und nicht am Ende ausgegeben werden.

Modified exec_process.js

var exec = require('child_process').exec; 
var result = function(command, cb){ 
    var child = exec(command, function(err, stdout, stderr){ 
     if(err != null){ 
      return cb(new Error(err), null); 
     }else if(typeof(stderr) != "string"){ 
      return cb(new Error(stderr), null); 
     }else{ 
      return cb(null, stdout); 
     } 
    }); 
    console.log(child); 
    child.on('close', function(code) { 
     console.log('child ended with: ' + code); 
    }); 
    child.on('error', function(err) { 
     console.log('child errd with: ' + err); 
    }); 
    child.stdout.on('data', function(d) { 
     console.log('child stdout: ' + d); 
    }); 
} 
exports.result = result; 

Hoffnung, das hilft.

11

Try this

// app.js 
require('child_process').spawn('sh', ['test.sh'], {stdio: 'inherit'}); 
+0

es ist einfach und funktioniert für mich – MaxySpark

+0

süß und einfach –

Verwandte Themen