我想要做的就是把“重复”的单个文件(比如无数次地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