2012-09-22 2 views
5

Unixコマンドパイプライン用RubyのObject#tapの慣用句はありますか?ユビキタスアナログとRubyのUnixコマンドパイプラインの `Object#tap`?

ユースケース:パイプライン内副作用のコマンドを実行したいが、パイプラインの連鎖を壊さないように暗黙的に入力を返す。たとえば:

echo { 1, 2, 3 } | 
    tr ' ' '\n' | 
    sort | 
    tap 'xargs echo' | # arbitrary code, but implicitly return the input 
    uniq 

私はこれを行うだろうルビー、から来ている:

[ 1, 2, 3 ]. 
    sort. 
    tap { |x| puts x }. 
    uniq 

答えて

6

teeコマンドは似ています。その入力を1つ以上のファイルと同様に標準出力に書き出します。もしそのファイルがプロセス置換であれば、同じ効果が得られます。プロセス置換で

echo 1 2 3 | tr ' ' '\n' | sort | tee >(**code**) | uniq 

コードがuniqへの呼び出しが見終わることと同じことである必要があり、標準入力から読んでいました。

+0

'プロセス置換'の場合+1。私が今まで使ってきた/ tmpファイルのほとんどが必要になります。 –

+0

'stderr'に表示したいだけの場合は、' ... | tee/dev/stderr | ... '。 – Vic

関連する問題