如何在Linux中创建最简单的“虚拟”文件,使得读取操作总是返回某个特定命令的输出(每次从该文件读取时都运行该命令)?因此,每次读取操作都会执行一条命令,捕获其输出并将其作为文件的“内容”传递。
如何在Linux中创建最简单的“虚拟”文件,使得读取操作总是返回某个特定命令的输出(每次从该文件读取时都运行该命令)?因此,每次读取操作都会执行一条命令,捕获其输出并将其作为文件的“内容”传递。
这是我复制下来的一个非常好的答案。
基本上,命名管道允许您在脚本中执行此操作,而Fuse使您可以轻松地使用Python实现这一点。
您可能正在寻找命名管道。
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
没有人提到这一点,但如果你可以选择文件的路径,你可以使用标准输入/dev/stdin
。
每次运行cat
程序时,它都会读取写入到管道中的程序的输出结果,这里仅为echo my input
:
for i in 1 2 3; do
echo my input | cat /dev/stdin
done
输出:
my input
my input
my input
open
、fstat
和read
等。必须拦截这些调用并输出与它们返回值不同的东西。这需要编写某种内核模块,即使如此,它也可能无法实现。inotifywait
进行尝试:#!/bin/bash
while inotifywait -qq -e access /path/to/file; do
echo "$(date +%s)" >> /tmp/access.txt
done
将此作为后台进程运行,每次读取您的文件时,您将在/tmp/access.txt
中获得一个条目。
cat /proc/cpuinfo
是什么? - Michael Cole