我需要在node.js中执行一个bash脚本。基本上,该脚本将在系统上创建用户帐户。我看到了这个例子,让我有了思路。但是,脚本本身需要像用户名、密码和用户真实姓名之类的参数。我仍然不知道如何传递这些参数给脚本,类似于以下操作:
var commands = data.toString().split('\n').join(' && ');
有没有人知道我如何在node.js中通过ssh连接传递参数并执行bash脚本。
谢谢
请查看此处的文档链接。该文档详细说明了如何传递命令行参数。请注意,您可以使用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
。
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将打印空行。
exec
函数转换为Promise的答案:https://dev59.com/PF0a5IYBdhLWcg3wD1Ae#56095793 - What Would Be Cool你可以使用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
command arg1 arg2...
来执行,就像示例中所示的那样,在node中也是同样适用的。 - hvgotcodesutil
? - KJ Price