Linux
轉儲程序的標準輸入和標準輸出
我有兩個程序,比如說父母和孩子。Parent 啟動 Child 並通過 child 的 stdin 和 stdout 與其通信。
Parent <-> Child
這些程序使用文本協議,我需要對其進行調查。我想創建一個 bash 腳本,它將由父而不是子啟動。此腳本將啟動子程序,此外會將標準輸入和標準輸出流轉儲到日誌文件中。
Parent <-> MyProcess <-> Child | v log.txt
bash 中有沒有辦法做我需要的事情,或者我需要使用 C 嗎?
最簡單的方法是使用
tee
將子項的輸入和輸出轉儲到兩個單獨的文件中,如下所示:#!/bin/bash tee in.log | child | tee out.log
您可以使用
tee
’-a
參數 ( append ) 將兩個日誌寫入同一個文件,但我不太確定它們是按正確的順序交錯還是一個接一個地寫入:#!/bin/bash tee -a both.log | child | tee -a both.log
如果您使用命名管道,那麼您是否有子程序和父程序都沒有關係:
p1:
#!/bin/sh # p1 rm -f p1.fifo;mkfifo p1.fifo trap "exit 1" 0 1 2 3 13 15 while read line; do echo p1 got "$line" echo p1 sending $line to p2 echo $line > p2.fifo sleep 1 done < p1.fifo
p2:
#!/bin/sh # p2 rm -f p2.fifo;mkfifo p2.fifo trap "exit 1" 0 1 2 3 13 15 while read line; do echo p2 got "$line" echo p2 sending $line to p1 echo $line > p1.fifo sleep 1 done < p2.fifo
初始消息:
echo message > p1.fifo
p1的輸出:
p1 got message p1 sending message to p2 p1 got message p1 sending message to p2
p2的輸出:
p2 got message p2 sending message to p1 p2 got message p2 sending message to p1 p2 got message