透過管道將兩個程式的標準輸出相互傳輸

透過管道將兩個程式的標準輸出相互傳輸

我有兩個程序,其中一個首先列印一些內容,它們需要使用標準 IO 相互通訊。

Bash 有沒有辦法透過管道將兩個程式的標準輸出相互連接?我知道我可以用 C 語言用 forks 和 dups 來做到這一點,但是有沒有辦法用純 Bash 來實現呢?

答案1

建立一個命名的 FIFO,它將「循環」管道:

mkfifo myfifo
<myfifo program1 | program2 >myfifo
rm myfifo

即使沒有任何程式先列印任何內容,您也可以將資料「注入」到 FIFO 中,以便由以下方式接收資料program1

# from another console
echo start >myfifo

要觀察/存儲通信,請tee在正確的位置使用。例子:

<myfifo program1 | program2 | tee myfifo
<myfifo program1 | tee /dev/tty ./log1 | program2 | tee ./log2 >myfifo

整個事情將在 中進行sh,在此解決方案中沒有任何特定於 Bash 的內容。

請閱讀這個答案關於可能導致僵局的情況。

相關內容