我需要在node.js中执行bash脚本。基本上,该脚本将在系统上创建用户帐户。我遇到了this example,它让我知道如何去做。但是,脚本本身需要用户名,密码和用户真实姓名等参数。我仍然无法弄清楚如何将这些参数传递给脚本做类似的事情:
var commands = data.toString().split('\n').join(' && ');
有没有人知道如何通过ssh连接传递这些参数并在node.js中执行bash脚本。 感谢
答案 0 :(得分:67)
请参阅文档here。它是关于如何传递命令行参数的非常具体的。请注意,您可以使用exec
或spawn
。 spawn
具有命令行参数的特定参数,而使用exec
时,您只需将参数作为要执行的命令字符串的一部分传递。
直接来自文档,内联说明评论
var util = require('util'),
spawn = require('child_process').spawn,
ls = spawn('ls', ['-lh', '/usr']); // the second arg is the command
// options
ls.stdout.on('data', function (data) { // register one or more handlers
console.log('stdout: ' + data);
});
ls.stderr.on('data', function (data) {
console.log('stderr: ' + data);
});
ls.on('exit', function (code) {
console.log('child process exited with code ' + code);
});
而使用exec
var util = require('util'),
exec = require('child_process').exec,
child;
child = exec('cat *.js bad_file | wc -l', // command line argument directly in string
function (error, stdout, stderr) { // one easy function to capture data/errors
console.log('stdout: ' + stdout);
console.log('stderr: ' + stderr);
if (error !== null) {
console.log('exec error: ' + error);
}
});
最后,请注意exec缓冲输出。如果要将输出流式传输回客户端,则应使用spawn
。
答案 1 :(得分:10)
var exec = require('child_process').exec;
var child = exec('cat *.js | wc -l', function(error, stdout, stderr) {
if (error) console.log(error);
process.stdout.write(stdout);
process.stderr.write(stderr);
});
这种方式更好,因为console.log将打印空白行。
答案 2 :(得分:9)
您可以使用process.argv
。它是一个包含命令行参数的数组。第一个元素是node
,第二个元素将是JavaScript文件的名称。所有下一个元素都将是您给出的任何其他命令行。
您可以像以下一样使用它:
var username = process.argv[2];
var password = process.argv[3];
var realname = process.argv[4];
或迭代数组。请看示例:http://nodejs.org/docs/latest/api/all.html#process.argv