有没有办法创建一个虚拟文件,这样从文件中读取实际上是从stdout命令中读取;写入文件实际上是写入stdin命令?
到目前为止,我已经将它与inotifywait一个文件结合在一起,它在文件被修改时调用一个命令,从文件中获取输入并写回它。
我不喜欢inotifywait必须不断重新启动它(并且我必须确保它始终运行)。我每周只使用这个文件两次。
Gil*_*il' 21
您可能正在寻找命名管道。
mkfifo f
{
echo 'V cebqhpr bhgchg.'
sleep 2
echo 'Urer vf zber bhgchg.'
} >f
rot13 < f
Run Code Online (Sandbox Code Playgroud)
写入管道不会启动监听程序。如果你想在一个循环中处理输入,你需要保持一个监听程序运行。
while true; do rot13 <f >decoded-output-$(date +%s.%N); done
Run Code Online (Sandbox Code Playgroud)
请注意,所有写入管道的数据都会合并,即使有多个进程写入。如果多个进程正在读取,则只有一个进程获取数据。所以管道可能不适合并发情况。
命名套接字可以处理并发连接,但这超出了基本 shell 脚本的能力。
在天平的最复杂的年底都是定制的文件系统,它可以让你设计并安装文件系统,其中每个open,write等等,在程序触发功能。最低投资是数十行非平凡编码,例如在Python 中。如果只想在读取文件时执行命令,可以使用scriptfs或fuseflt。