Linux

如何在多個程序之間共享標準輸出?

  • January 30, 2014

我想接收實時 TCP 流,並使其同時被另一個程序讀取,而不保存它。

例如,111.222.233.244:1234 流式傳輸實際時間。伺服器只支持一個連接。

TTY1:

$ nc 111.222.233.244 1234 | (do something here) /tmp/tcpstream &
$ sleep 5 # stream is received even if there is no process that reads it
$ cat /tmp/tcpstream # it can also be like `(some command) | cat -`
17:00:06
17:00:07
17:00:08
17:00:09
17:00:10
17:00:11

TTY2(第二次cat在執行後 9 秒執行nc):

$ cat /tmp/tcpstream
17:00:09
17:00:10
17:00:11

也許tcpclone工具可以幫助你。它偵聽某個埠上的傳入連接,並且從標準輸入讀取的任何數據都將轉發到這些連接。

你的例子應該變成這樣:

$ nc 111.222.233.244 1234 | ./tcpclone 5555 &
$ nc 127.0.0.1 5555

我不確定我是否完全理解您的問題,但是如何:

$ nc 111.222.233.244 1234 \
   | tee -a /tmp/stream.dump \
   | while ! do_something_here; do : ; done

除了明顯地將流轉儲到文件中tee(附加,因為網路可能由於各種原因而斷開連接,您可能不一定要覆蓋流的前一部分),do_somehing_here除非它正確退出,否則它將重新生成。因此,do_somehing_here例如,如果是包裝腳本,您可以殺死它實際呼叫的任何內容,這會使腳本異常退出並立即重新生成。如果在殺死腳本之前編輯腳本,則無需重新連接即可更改流的處理。

引用自:https://unix.stackexchange.com/questions/111530