2012-09-22 19 views
5

Unix komut boru hatları için Ruby's Object#tap'un deyimsel bir benzetimi var mı?Unix komutu Pipeline'leri için Ruby'nin `` Nesne # '' konusundaki Idiomatic Analog?

Kullanım durumu: bir boru hattı içinde Yan etkileri için bir komut yürütmek istiyorum ancak girişi boru hattının zincirini kırmayacak şekilde dolaylı olarak döndürmek istiyorum. Örneğin:

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

Ben bu yapacağını Ruby, geliyorum:

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

cevap

6

tee komut benzer; girdisini standart çıktının yanı sıra bir veya daha fazla dosyaya yazar. Bu dosya bir süreç ikamesi ise, aynı etkiyi elde edersiniz, inanıyorum.

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

uniq çağrısı görmeye biter aynı şey olmalı onun standart girdi, okurdum süreç yerine kodu. 'Süreç değiştirme' için

+0

+1. Şimdiye kadar kullandığım/tmp dosyalarının çoğuna ihtiyaç duyuluyor. –

+0

Ve sadece 'stderr' görüntülemek istediğinizde, ... | tee/dev/stderr | ... '. – Vic