Unixのパイプラインで透過的にふるまうRubyのスクリプトを作るには？


こんにちは。標準ストリームについての質問です。  
Unixのパイプラインで使用して、透過的に使うツールを作りたいと考えています。(透過的という用語をこの文脈で使っていいのかどうかわかりませんが、具体的には
`tee` のようなものを想定しています。)

下記のようなスクリプト `pass.rb` を作成したとして

[code]

    #! /usr/bin/env ruby
    
    lines = readlines.map(&:chomp)
    
    # do something useful...
    #   
    # end
    
    puts lines
    
[/code]

`chmod +x pass.rb`

この `pass.rb` はパイプの中間に挟んだ時に

[code]

    hoge | ./pass.rb | fuga
    
[/code]

[code]

    hoge | fuga
    
[/code]

fugaに渡される入力データは常に同じになるでしょうか？

もし同等にならない場合は、どのような例で問題が発生するのか、  
どうすれば同等にできるのかを教えて頂けると助かります。

よろしくおねがいします。




`chomp` しているので、入力されたデータの改行コードが変わる可能性があります。

たとえば改行コードのデフォルトが LF の環境において改行コードが CRLF の入力を食わせると、出力の改行コードが LF になってしまいます。

[code]

    % cat foo.txt | od -c
    0000000    a   a   a  \r  \n                                            
    0000005
    % cat foo.txt | ./pass.rb | od -c
    0000000    a   a   a  \n                                                
    0000004
    
[/code]

パイプからテキスト以外のデータが流れてくる可能性も考えると、入出力部分ではバイナリデータとして読み書きし、"do something useful"
部分で必要に応じてテキストデータに変換するのが良さそうです。




`chomp` しているので、入力されたデータの改行コードが変わる可能性があります。

たとえば改行コードのデフォルトが LF の環境において改行コードが CRLF の入力を食わせると、出力の改行コードが LF になってしまいます。

[code]

    % cat foo.txt | od -c
    0000000    a   a   a  \r  \n                                            
    0000005
    % cat foo.txt | ./pass.rb | od -c
    0000000    a   a   a  \n                                                
    0000004
    
[/code]

パイプからテキスト以外のデータが流れてくる可能性も考えると、入出力部分ではバイナリデータとして読み書きし、"do something useful"
部分で必要に応じてテキストデータに変換するのが良さそうです。

