원문 링크 -http://www.catonmat.net/blog/nodejs-modules-procstreams/
본 게시글은 원저자의 허락을 얻어 번역한 것입니다.

1회 연재 - dnode (RPC 라이브러리)

2회 연재 - optimist (옵션 파서)

3회 연재 - lazy (lazy 리스트 처리)

4회 연재 - request (HTTP 스트림 처리)

5회 연재 - hashish (해시 처리)

6회 연재 - read (쉬운 표준 입력 처리)

7회 연재 - ntwitter (트위터 API)

8회 연재 - socket.io (웹소켓 통신)

9회 연재 - redis (redis 클라이언트 라이브러리)

10회 연재 - express (경량의 고속 웹 프레임워크)

11회 연재 - semvar (버전 넘버링 처리)

12회 연재 - cradle (고수준 CouchDB 클라이언트)

13회 연재 - JSONStream (스트리밍 JSON 파서)

14회 연재 - everyauth (페이스북, 트위터 등의 서비스 인증)

오늘 소개할 모듈은 polotek이라는 닉네임으로 알려진 Marco Rogers가 만든 procstreams 모듈이다. procstreams는 node에서 쉘 스크립팅을 실행하는 아직 실험 단계의 모듈이다.

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
  });

위 예제는 cat lines.txt 쉘 명령어를 실행한 다음, 결과값을 wc -l 명령의 입력으로 전달(pipe) 한다. 그런 다음 콜백 함수를 통해  lines.txt 파일의 라인 수를 출력하게 된다.

다음은 또 다른 예제이다.

var $p = require('procstreams');

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

위 예제는 mkdir foo 을 실행하고, 이 명령이 성공하면 cp file.txt foo/ 명령을 실행한다. 이 명령이 계속 성공했다면, rm file.txt 명령을 계속 수행한다. 위 코드를 쉘 스크립트로 작성하면 다음과 같을 것이다.

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

.and(…) 함수는 쉘 스크립트에서 && 와 같다.

procstreams는 또한 쉘 스크립트 명령에서 ||와 유사한 .or(...) 메서드와 ;와 유사한 .then(...)메서드를 지원한다.

다음은 예제 코드이다.

var $p = require('procstreams');

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

이 예제는 mkdirs foo 명령을 수행한 다음, file.txt를 file2.txt로 복사한다. 만약 복사가 실패할 경우 "failed" 에러를 ~/notify 파일에 쓴다. 쉘 스크립트로 작성하면 다음과 같을 것이다.

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

procstreams의 전체 기능을 알고 싶다면 Github 사이트상의 procstreams documentation을 살펴봐라.

다음과 같이 npm을 통해 procstreams 를 설치할 수 있다.

npm install procstreams

Procstreams의 GitHub 사이트 : https://github.com/polotek/procstreams.