Tôi muốn lấy stdout của một quá trình và phân tích nó với ba chương trình khác nhau. Tôi đã có thể sử dụng ống được đặt tên, nhưng tôi có thể sử dụng fd để thay thế.Làm thế nào để tee vào fd thay vì đặt tên ống
Dưới đây là những gì làm việc cho đến nay:
exec 3< <(myprog)
tee p1 p2 >/dev/null <&3
cat p1|ap1 &
cat p2|ap2 &
p1 và p2 được tạo ra với mkfifo. ap1 và ap2 là các chương trình phân tích. Tôi không biết nếu tôi nói điều này đúng, nhưng có một cách để tee
thành hai fd mới thay thế? Một cái gì đó như thế này:
exec 3< <(myprog)
tee >&4 >&5 <&3
cat <&4|ap1 &
cat <&5|ap2 &
Ahh. Điều đó có thể hiệu quả. Có cách nào để tee để fd của mặc dù? ap1 và ap2 là các lệnh rất lớn với đường ống và tấn công tắc. Sẽ dễ đọc hơn nếu tôi có thể sử dụng fd. – User1
@ User1: chắc chắn là có thể (và có lợi thế là làm việc trong các trình bao không hỗ trợ '<()' and '>()'), nhưng cú pháp là khó xử. Ở đây sẽ đơn giản hơn để định nghĩa 'ap1' và' ap2' làm hàm. – Gilles
Cú pháp khác là gì? Tôi chỉ nhận thấy rằng tôi sử dụng nếu báo cáo trong một số phần của kịch bản mà sửa đổi cách ap1 được gọi là theo tham số đầu vào. '>()' có lẽ sẽ không hoạt động tốt trong trường hợp của tôi. Nhưng tôi không biết làm thế nào tôi có thể gọi nó. Bất kỳ ý tưởng? Cảm ơn vì sự giúp đỡ của bạn. – User1