在linux / bash中创build无限循环重复的文件猫

我想要做的就是把“重复”的单个文件(比如无数次地input)作为另一个程序的input。 有没有在命令行/使用bash的方式?

进程替换提供了一种机制,通过这种机制,bash可以生成一个临时的,可读的文件名,连接到任意一块bash代码:

./my_program -input <(while cat file_to_repeat; do :; done) 

这将在支持它的操作系统上创建一个/dev/fd/NN风格的名称,否则在命名管道上创建一个。

yes命令使用文件内容作为参数:

 yes "$(<file)" | somecommand 

是。

 while [ true ]; do cat somefile; done | somecommand 

出现这是可能的通过使用mkfifo (这种方式允许轻松控制,可重新启动,大文件)

 $ mkfifo eternally_looping_filename # you can name this what you want. 

然后从一个bash提示符写入fifo“ 循环 ”,例如:创建名为bash_write_eternal.sh的脚本:

 while [ true ]; do cat /path/to/file_want_repeated > ./eternally_looping_filename done 

在一个终端运行

 $ ./bash_write_eternal.sh 

(如果你想重复使用同一个终端,你也可以把它作为背景)

然后在另一个终端上运行你的输入程序,如

 $ ./my_program -input ./eternally_looping_filename 

要么

 $ cat ./eternally_looping_filename | ./my_program 

您的程序现在将接收该文件循环的永久输入。 你甚至可以通过中断运行bash_write_eternal.sh脚本的终端来“暂停”接收程序(它的输入将被暂停,直到你恢复fifo脚本)。

另一个好处是在调用之间“可恢复”,并且如果你的程序碰巧不知道如何接收来自“stdin”的输入,它可以从文件名中接收它。

while :循环永远重复:

 while : do cat input.txt done | your-program 

要使用帮助器功能:

 repeat() while :; do cat "$1"; done repeat input.txt | your-program