Tôi muốn xuất một số dữ liệu vào một đường ống và có quá trình khác thực hiện điều gì đó với dòng dữ liệu theo từng dòng. Dưới đây là ví dụ về đồ chơi:Làm thế nào để tránh tiếng vang đóng FIFO tên ống? - Hành vi hài hước của Unix FIFO
mkfifo pipe
cat pipe&
cat >pipe
Bây giờ tôi có thể nhập bất kỳ thứ gì mình muốn và sau khi nhấn, tôi sẽ thấy ngay một dòng. Nhưng nếu ống thứ hai thay thế với echo
:
mkfifo pipe
cat pipe&
echo "some data" >pipe
Các ống đóng sau echo
và cat pipe&
kết thúc vì vậy mà tôi không thể vượt qua bất kỳ dữ liệu hơn thông qua các đường ống. Có cách nào để tránh đóng đường ống và quá trình nhận dữ liệu, để tôi có thể truyền nhiều dòng dữ liệu qua đường ống từ tập lệnh bash và xử lý chúng khi chúng đến?
Phiên bản thứ hai làm một công việc exellent! Người đầu tiên không làm việc cho tôi vì tôi không muốn khởi động lại quá trình nhận dữ liệu. – user1084871
Bạn có thể lừa và giữ 'con mèo' giữ ống mở để viết bằng cách sử dụng:' cat pipe 3> pipe'. Lệnh 'cat' sẽ không sử dụng bộ mô tả tập tin 3, nhưng sẽ có FIFO được gọi là đường ống mở để viết (mặc dù nó sẽ đọc nó trên một bộ mô tả tập tin khác - có thể là số 4). –
Có 'exec> 6 pipe' không đạt được điều tương tự? Về cơ bản gán 'pipe' cho file-descriptor 6 và giữ nó mở để viết. Thay vì viết thành 'pipe' trực tiếp, bạn có thể muốn ghi vào bộ mô tả đó bằng cách sử dụng'> & 6' nhưng nếu không nó sẽ giữ nó mở iirc – Haravikk