Node.js 从代码执行shell脚本
我正在尝试从nodejs代码执行一个shell脚本Node.js 从代码执行shell脚本,node.js,shell,child-process,Node.js,Shell,Child Process,我正在尝试从nodejs代码执行一个shell脚本 //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 = req
//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;
执行app.js后,我无法看到任何响应。我做错了什么?代码对我来说完美无瑕,没有任何更改。当你说你看不到任何回应时,这个过程是否挂起?最后的结果是什么?我怀疑脚本中的sudo命令会导致一些问题。你能消除这一点并改变吗?我没有sudo访问权限,因此在提示时失败
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â
一些诊断步骤:
- 在EXEC调用后打印子对象。这将打印与子进程相关的进程信息。这将确保孩子已经启动
- 安装子终止回调,并在其中打印调试信息。这将确保孩子结束
- 如果问题仍然存在,请安装子流挂钩。这将确保流中的即时打印立即输出,而不是在最后输出
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;
希望这有帮助。试试这个
// app.js
require('child_process').spawn('sh', ['test.sh'], {stdio: 'inherit'});
app.js中的exec变量是您的子进程实例吗?我使用spawn方法。如果您想看到一些响应,那么您应该向控制台发送一些内容。您是否尝试过将
sh test.sh
放在相对于工作目录的路径上。还要检查您的执行权限。sh test.sh正在为mesweet和simple工作