Get Even More Visitors To Your Blog, Upgrade To A Business Listing >>

How to execute multiple shell commands using node.js?

How to execute multiple shell commands using node.js?

Problem

Maybe I haven't groked the asynchronous paradigm yet, but I want to do something like this:

var exec, start;
exec = require('child_process').exec;
start = function() {
  return exec("wc -l file1 | cut -f1 -d' '", function(error, f1_length) {
    return exec("wc -l file2 | cut -f1 -d' '", function(error, f2_length) {
      return exec("wc -l file3 | cut -f1 -d' '", function(error, f3_length) {
        return do_something_with(f1_length, f2_length, f3_length);
      });
    });
  });
};

It seems a little weird to keep nesting those callbacks every time I want to add a new shell command. Isn't there a better way to do it?

Problem courtesy of: nachocab

Solution

I personally use TwoStep in these situations:

var TwoStep = require("two-step");
var exec, start;
exec = require('child_process').exec;
start = function() {
  TwoStep(
    function() {
      exec("wc -l file1 | cut -f1 -d' '", this.val("f1_length"));
      exec("wc -l file2 | cut -f1 -d' '", this.val("f2_length"));
      exec("wc -l file3 | cut -f1 -d' '", this.val("f3_length"));
    },
    function(err, f1_length, f2_length, f3_length) {
      do_something_with(f1_length, f2_length, f3_length);
    }
  );
};

That said, there are a ton of flow controll libraries out there. I encourage you to try some out: https://github.com/joyent/node/wiki/Modules#wiki-async-flow

Solution courtesy of: Xavi

Discussion

View additional discussion.



This post first appeared on Node.js Recipes, please read the originial post: here

Share the post

How to execute multiple shell commands using node.js?

×

Subscribe to Node.js Recipes

Get updates delivered right to your inbox!

Thank you for your subscription

×