2012-09-22 10 views
5

Có tương tự thành ngữ với số Object#tap của Ruby đối với các đường dẫn lệnh của Unix không?Tương tự thành ngữ với «Object # tap` của Ruby cho lệnh Unix Pipelines?

Trường hợp sử dụng: trong một đường ống Tôi muốn thực hiện lệnh cho các hiệu ứng phụ của nó nhưng trả lại đầu vào một cách ngầm định để không làm đứt chuỗi đường ống. Ví dụ:

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

Tôi đến từ Ruby, nơi tôi sẽ làm điều này:

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

Trả lời

6

Lệnh tee là tương tự; nó viết đầu vào của nó vào đầu ra tiêu chuẩn cũng như một hoặc nhiều tệp. Nếu tập tin đó là một quá trình thay thế, bạn sẽ có được hiệu ứng tương tự, tôi tin.

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

Mã trong quá trình thay thế sẽ đọc từ đầu vào tiêu chuẩn của nó, mà phải là cùng một điều mà các cuộc gọi đến uniq kết thúc lên nhìn thấy.

+0

+1 cho 'thay thế quy trình'. Có nhu cầu cho hầu hết các tập tin/tmp tôi từng sử dụng. –

+0

Và trong trường hợp bạn chỉ muốn hiển thị cho 'stderr',' ... | tee/dev/stderr | ... '. – Vic