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

时间:2016-01-01 10:11:55

标签: linux bash cat

我想做的是发送一个文件"重复" (像猫一样无数次)作为另一个程序的输入。在命令行上有/使用bash吗?

5 个答案:

答案 0 :(得分:5)

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

yes "$(<file)" | somecommand

答案 1 :(得分:4)

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

答案 2 :(得分:4)

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

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

这将在支持它的操作系统上创建/dev/fd/NN样式名称,否则会在命名管道上创建。{/ p>

答案 3 :(得分:1)

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

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

然后写信给那个fifo&#34; looping&#34;从一个bash提示符开始,例如:创建名为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

您的程序现在将收到该文件的永久输入,一遍又一遍地循环。你甚至可以暂停&#34;接收程序通过中断运行bash_write_eternal.sh脚本的终端(其输入将被暂停,直到您恢复fifo写入脚本)。

另一个好处是&#34;可恢复&#34;在调用之间,以及如果你的程序碰巧不知道如何从&#34; stdin&#34;它可以从文件名中接收它。

答案 4 :(得分:0)

while :循环永远重复:

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

使用辅助功能:

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