Tôi có hai (UNIX) chương trình A và B đọc và ghi từ stdin/stdout.Kết nối đầu vào _and_output giữa hai lệnh trong shell/bash
Vấn đề đầu tiên của tôi là cách kết nối giá trị của A thành stdin của B và giá trị trung bình của B thành stdin của A. I.e., giống như A | B nhưng một đường ống hai chiều. Tôi nghi ngờ tôi có thể giải quyết điều này bằng cách using exec to redirect nhưng tôi không thể làm cho nó hoạt động. Các chương trình tương tác nên một tệp tạm thời sẽ không hoạt động. Vấn đề thứ hai là tôi muốn lặp lại mỗi hướng và đường ống một bản sao thông qua một chương trình khai thác gỗ để stdout để tôi có thể nhìn thấy lưu lượng truy cập (dòng văn bản) đi qua giữa các chương trình. Quay lại đầu trang Ở đây tôi có thể nhận được đi với tee> (...) nếu tôi có thể giải quyết vấn đề đầu tiên.
Cả hai vấn đề này có vẻ như họ cần phải có các giải pháp nổi tiếng nhưng tôi không thể tìm thấy bất cứ điều gì.
Tôi thích giải pháp vỏ POSIX, hoặc ít nhất một thứ hoạt động trong bash trên cygwin.
Nhờ câu trả lời của bạn, tôi đã đưa ra giải pháp sau. Các lệnh A/B sử dụng nc để nghe hai cổng. Chương trình ghi nhật ký sử dụng sed (với -u để xử lý không bị chặn).
bash-3.2$ fifodir=$(mktemp -d)
bash-3.2$ mkfifo "$fifodir/echoAtoB"
bash-3.2$ mkfifo "$fifodir/echoBtoA"
bash-3.2$ sed -u 's/^/A->B: /' "$fifodir/echoAtoB" &
bash-3.2$ sed -u 's/^/B->A: /' "$fifodir/echoBtoA" &
bash-3.2$ mkfifo "$fifodir/loopback"
bash-3.2$ nc -l -p 47002 < "$fifodir/loopback" \
| tee "$fifodir/echoAtoB" \
| nc -l -p 47001 \
| tee "$fifodir/echoBtoA" > "$fifodir/loopback"
Điều này nghe để kết nối với cổng 47001 và 47002 và lặp lại tất cả lưu lượng truy cập đến đầu ra tiêu chuẩn.
Trong vỏ 2 làm:
bash-3.2$ nc localhost 47001
Trong vỏ 3 làm:
bash-3.2$ nc localhost 47002
Bây giờ dòng nhập vào trong vỏ 2 sẽ được ghi vào shell 3 và ngược lại và giao thông được ghi nhận vào shell 1 , giống như:
B->A: input to port 47001
A->B: input to port 47002
Ở trên đã được thử nghiệm trên Cygwin
Cập nhật: Tập lệnh ở trên ngừng hoạt động sau một vài ngày (!). Rõ ràng nó có thể bế tắc. Một số gợi ý trong câu trả lời có thể đáng tin cậy hơn.
twinpipe cũng đi kèm với một kịch bản shell mà sử dụng cách tiếp cận ống tên được đề xuất bởi người khác. Cảm ơn –