2012-09-22 20 views
5

對於Unix命令管道,Ruby的Object#tap是否有一種習慣用法?用於Unix命令管道的習慣化模擬到Ruby的`對象#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命令是相似的;它將其輸入寫入標準輸出以及一個或多個文件。如果該文件是一個進程替代,我相信你會得到同樣的效果。

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

在這個過程中替換的代碼會從標準輸入,這應該是同樣的事情在調用uniq最終看到的閱讀。

+0

+1代表'進程替代'。我需要使用大部分/ tmp文件。 –

+0

如果你只是想顯示到'stderr','... | tee/dev/stderr | ...'。 – Vic