【问题标题】:Node.js Shell Script And ArgumentsNode.js Shell 脚本和参数
【发布时间】:2011-11-19 19:29:51
【问题描述】:

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

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

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

【问题讨论】:

    标签: bash node.js


    【解决方案1】:

    请参阅文档here。关于如何传递命令行参数非常具体。请注意,您可以使用execspawnspawn 有一个用于命令行参数的特定参数,而使用 exec 您只需将参数作为要执行的命令字符串的一部分传递。

    直接来自文档,内联解释 cmets

    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

    【讨论】:

    • 感谢您的回复。我的意思实际上是命令本身位于需要参数的 bash 脚本中。而且我不知道如何在读取 bash 文件的内容时使用 node.js 传递这些参数。
    • @joque 我不明白你的意思。如果您在 CLI 上调用脚本,您可以使用 command arg1 arg2... 您可以使用 node 执行此操作,如示例中所示。
    • 好吧@hvgotcodes,我想按照[blog.nodejitsu.com/nodejs-cloud-server-in-three-minutes] 中的过程并执行脚本传递参数。现在,我不知道该怎么做,除非我在一个又一个命令中分解它。你明白我的意思吗?
    • 我只是好奇,你为什么需要util
    • @hvgotcodes 如何将 spawn 用于 'sudo hcitool lescan --duplicates &'
    【解决方案2】:
    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 会打印空行。

    【讨论】:

    【解决方案3】:

    您可以使用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

    【讨论】:

      猜你喜欢
      • 2012-05-21
      • 1970-01-01
      • 2015-06-02
      • 2012-08-16
      • 1970-01-01
      • 1970-01-01
      • 2018-11-18
      • 2011-02-08
      • 2020-11-27
      相关资源
      最近更新 更多