2012-09-22 20 views
5

यूनिक्स कमांड पाइपलाइनों के लिए रुबी के 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 आदेश समान है; यह मानक आउटपुट के साथ-साथ एक या अधिक फ़ाइलों के लिए अपना इनपुट लिखता है। यदि वह फ़ाइल एक प्रक्रिया प्रतिस्थापन है, तो मुझे विश्वास है, आपको विश्वास है।

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

प्रक्रिया प्रतिस्थापन में कोड अपने मानक इनपुट है, जो एक ही बात होनी चाहिए कि uniq करने के लिए कॉल देखकर समाप्त होता है से पढ़ा होगा। 'प्रक्रिया प्रतिस्थापन' के लिए

+0

+1। मैंने कभी भी उपयोग की जाने वाली अधिकांश/tmp फ़ाइलों की आवश्यकता को पूरा किया है। –

+0

और यदि आप बस 'stderr' पर प्रदर्शित करना चाहते हैं,' ... | टी/देव/stderr | ... '। – Vic