Làm thế nào tôi có thể chuyển đầu ra của một lệnh sang đầu vào của hai lệnh khác cùng một lúc?
Làm thế nào tôi có thể chuyển đầu ra của một lệnh sang đầu vào của hai lệnh khác cùng một lúc?
Câu trả lời:
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  EDIT : những gì bạn nhìn thấy trong less.lesslà cù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ó.
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.".