it-swarm-vi.tech

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

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?

25
Richard Hoskins

Nghe có vẻ như lệnh teesẽ làm những gì bạn muốn.

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

>( )

cho thay thế quá trình . Với teename__, hãy 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 của lslàm đầu vào cho hai chương trình grepkhác nhau, hãy lưu đầu ra của mỗi grepvào các tệp khác nhau và chuyển tất cả kết quả qua lessname__, hãy thử:

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

Kết quả của ls -A sẽ được "chuyển" thành cả grepname__s. Tệp hidden-files sẽ có nội dung từ đầu ra của grepnormal-files sẽ có kết quả của grepthứ hai. Tất cả các tệp sẽ được hiển thị trong máy nhắn tin lessname__. CHỈNH SỬA: những gì bạn thấy trong less cùng một đầu ra chính xác của ls -A, không phải là kết quả của grepname__s. Nếu bạn muốn sửa đổi đầu ra từ ls -A thành lessname__, (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 có >/dev/null, đầu ra của grepname__s sẽ được thêm vào đầu ra của ls -A thay vì thay thế nó.

nguồn

54
Ben

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à tới 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 Wikipedia tee (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.".

6
Peter Mortensen