Files

創建一個實際上是命令的虛擬文件

  • September 12, 2021

有沒有辦法創建一個虛擬文件,這樣從文件中讀取實際上是從stdout命令中讀取的;寫入文件實際上是寫入stdin命令的?

到目前為止,我已經用inotifywait一個文件來解決這個問題,它在文件被修改時呼叫一個命令,從文件中獲取它的輸入並寫回它。

我不喜歡inotifywait必須不斷重新啟動它(我必須確保它始終執行)。我每週只使用這個文件兩次。

您可能正在尋找命名管道

mkfifo f
{
 echo 'V cebqhpr bhgchg.'
 sleep 2
 echo 'Urer vf zber bhgchg.'
} >f
rot13 < f

寫入管道不會啟動監聽程序。如果要循環處理輸入,則需要保持監聽程序執行。

while true; do rot13 <f >decoded-output-$(date +%s.%N); done

請注意,寫入管道的所有數據都會合併,即使有多個程序寫入也是如此。如果多個程序正在讀取,則只有一個程序獲取數據。所以管道可能不適合併發情況。

命名套接字可以處理並發連接,但這超出了基本 shell 腳本的能力。

規模最複雜的一端是自定義文件系統,它允許您設計和安裝一個文件系統,其中每個open,write等都觸發程序中的一個函式。最少的投資是幾十行非平凡的編碼,例如在Python中。如果只想在讀取文件時執行命令,可以使用scriptfsfuseflt

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