Hello everyone! This is the 15th post in the node.js modules you should know about article series.

The first post was about dnode - the freestyle rpc library for node, the second was about optimist - the lightweight options parser for node, the third was about lazy - lazy lists for node, the fourth was about request - the swiss army knife of HTTP streaming, the fifth was about hashish - hash combinators library, the sixth was about read - easy reading from stdin, the seventh was about ntwitter - twitter api for node, the eighth was about socket.io that makes websockets and realtime possible in all browsers, the ninth was about redis - the best redis client API library for node, the tenth was on express - an insanely small and fast web framework for node, the eleventh was semver - a node module that takes care of versioning, the twelfth was cradle - a high-level, caching, CouchDB client for node, the thirteenth was jsonstream - streaming JSON parsing library, the fourteenth was about everyauth - a module for authenticating your webapp with facebook, twitter, etc.

Today I'm gonna introduce you to procstreams by Marco Rogers aka polotek. Procstreams is a little experiment with shell scripting in node. Here is an example:

var $p = require('procstreams'); $p('cat lines.txt').pipe('wc -l') .data(function(stdout, stderr) { console.log(stdout); // prints number of lines in the file lines.txt });

This example executes the shell command cat lines.txt , then pipes the output to wc -l , and then collects the output through a callback that prints the number of lines in lines.txt

Here is another example:

var $p = require('procstreams'); $p('mkdir foo') .and('cp file.txt foo/') .and('rm file.txt') .on('exit', function() { console.log('done'); });

This example executes mkdir foo , and if that succeeds, it executes cp file.txt foo/ , and if that succeeds, it executes rm file.txt . In shells scripting you'd write this as:

mkdir foo && cp file.txt foo/ && rm file.txt

The .and(...) is the same as && in the shell scripting.

Procstreams also support .or(...) , which is || in the shell and .then(...) , which is ; in the shell.

Here is an example:

var $p = require('procstreams'); $p('mkdir foo') .then('cp file.txt file2.txt') .or('echo "failed" > ~/notify')

This example mkdirs foo , then copies file.txt to file2.txt, if that fails, it echos "failed" to ~/notify . Shell equivalent:

mkdir foo; cp file.txt file2.txt || echo "failed" > ~/notify

See procstreams documentation on GitHub for full info on other thingies it supports.

You can install procstreams through npm as always:

npm install procstreams

Procstreams on GitHub: https://github.com/polotek/procstreams.