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ư tee
lệ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 ls
là đầu vào cho hai grep
chương trình khác nhau , hãy lưu đầu ra của từng grep
tệ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 -A
sẽ được "dẫn" vào cả hai grep
s. Các tập tin hidden-files
sẽ có nội dung từ đầu ra của lần đầu tiên grep
, và normal-files
sẽ 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
.less
là 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 grep
s. Nếu bạn muốn sửa đổi đầu ra từ ls -A
thà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 grep
s sẽ được thêm vào đầu ra ls -A
thay 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.".