Đầu ra của một lệnh có thể được dẫn đến hai lệnh khác không?


Câu trả lời:


56

Có vẻ như teelệnh sẽ làm những gì bạn muốn.

Chìa khóa là sử dụng

>( )

để thay thế quá trình . Với tee, sử dụng mẫu sau:

tee >(proc1) >(proc2) >(proc3) | proc4

Vì vậy, nếu bạn muốn sử dụng đầu ra lslà đầu vào cho hai grepchương trình khác nhau , hãy lưu đầu ra của từng greptệp vào các tệp khác nhau và chuyển tất cả các kết quả qua less, hãy thử:

ls -A | tee >(grep ^[.] > hidden-files) >(grep -v ^[.] > normal-files) | less

Kết quả của ls -Asẽ được "dẫn" vào cả hai greps. Các tập tin hidden-filessẽ có nội dung từ đầu ra của lần đầu tiên grep, và normal-filessẽ có kết quả của lần thứ hai grep. Tất cả các tệp sẽ được hiển thị trong máy nhắn tin less. EDIT : những gì bạn nhìn thấy trong lesscùng một sản lượng chính xác của ls -A, không phải là kết quả của greps. Nếu bạn muốn sửa đổi đầu ra từ ls -Athành less, (ví dụ: hoán đổi thứ tự để các tệp bình thường được liệt kê trước các tệp bị ẩn), hãy thử điều này:

ls -A | tee >(grep ^[.]) >(grep -v ^[.]) >/dev/null | less

Nếu không >/dev/null, đầu ra của greps sẽ được thêm vào đầu ra ls -Athay vì thay thế nó.

nguồn


3
cái này rất tốt
hayalci

3
+1 vì thậm chí sau 10 năm viết kịch bản shell, tôi chưa bao giờ thấy điều này!
jtimberman

6

Sử dụng "tee".

Thí dụ:

grep someSearchString someFile | tee /dev/tty | wc -l > grepresult

Điều này sẽ gửi đầu ra của lệnh grep đến cả thiết bị đầu cuối và wc (đầu ra của nó lần lượt được chuyển hướng đến tệp ginteresult).

"Tee" được giải thích trong bài viết trên Wikipedia (lệnh) . Trung tâm là: "Lệnh tee đọc đầu vào tiêu chuẩn, sau đó ghi nội dung của nó vào đầu ra tiêu chuẩn và đồng thời sao chép nó vào (các) tệp được chỉ định hoặc các biến.".

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.