我想輸出一些數據到一個管道,讓另一個進程對數據一行一行地做些什麼。這裏是一個玩具例子:如何避免回聲關閉FIFO命名管道? - Unix FIFO的有趣行爲
mkfifo pipe
cat pipe&
cat >pipe
現在我可以進入任何我想要的,然後按Enter鍵後,我立刻看到同一行。但是,如果替代第二管道與echo
:
mkfifo pipe
cat pipe&
echo "some data" >pipe
管道後echo
和cat pipe&
完成關閉,這樣我可以不通過管道傳遞任何更多的數據。有沒有辦法避免關閉管道和接收數據的進程,以便我可以通過管道從bash腳本傳遞多行數據,並在它們到達時對它們進行處理?
第二個版本則方位的工作!第一個不適合我,因爲我不想重新啓動接收數據的進程。 – user1084871
您可能可以作弊,並讓'cat'通過使用:'cat pipe 3> pipe'將管道打開以便寫入。 'cat'命令不會使用文件描述符3,但是將會有一個叫做管道的FIFO,用於寫入(儘管它將在另一個文件描述符 - 可能是4上讀取它)。 –
'exec> 6 pipe'沒有達到同樣的效果嗎?基本上將'pipe'分配給文件描述符6並保持寫入狀態。而不是直接寫入'pipe',你可能希望使用'>&6'寫入描述符,否則它應該保持它打開iirc – Haravikk