Files
創建一個實際上是命令的虛擬文件
有沒有辦法創建一個虛擬文件,這樣從文件中讀取實際上是從
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中。如果只想在讀取文件時執行命令,可以使用scriptfs或fuseflt。