Node.js Shell脚本和参数

时间:2011-09-18 19:52:58

标签: bash node.js

我需要在node.js中执行bash脚本。基本上,该脚本将在系统上创建用户帐户。我遇到了this example,它让我知道如何去做。但是,脚本本身需要用户名,密码和用户真实姓名等参数。我仍然无法弄清楚如何将这些参数传递给脚本做类似的事情:

var commands = data.toString().split('\n').join(' && ');

有没有人知道如何通过ssh连接传递这些参数并在node.js中执行bash脚本。 感谢

3 个答案:

答案 0 :(得分:67)

请参阅文档here。它是关于如何传递命令行参数的非常具体的。请注意,您可以使用execspawnspawn具有命令行参数的特定参数,而使用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