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