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.