在 linux/bash 中创建无限循环重复文件 cat

create infinite looping repeating file cat in linux/bash

我想做的是发送一个文件 "repeatedly"(就像无限次地搜索它一样)作为另一个程序的输入。命令 line/using bash?

有办法吗

似乎可以通过使用 mkfifo(这种方式可以轻松控制、重新启动和大文件)

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

然后从 bash 提示符写入 fifo“looping”,例如:创建名为 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

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

另一个好处是调用之间 "resumable",而且如果您的程序碰巧不知道如何从 "stdin" 接收输入,它可以从此处的文件名接收输入。

是的。

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

yes command,使用文件内容作为参数:

yes "$(<file)" | somecommand

Process substitution 提供了一种机制,bash 可以通过该机制为您生成连接到任意 bash 代码块的临时、可读文件名:

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

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

一个while :循环永远重复:

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

要使用辅助函数:

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