【发布时间】:2017-10-31 16:04:26
【问题描述】:
在 bash 脚本中,我使用以下命令将命令的输出通过管道传输到另一个命令的输入:
$ output_com | input_com
output_com 比 input_com 慢。在我的脚本中,在input_com 准备好运行之前,还需要执行一些其他命令。
为了加快速度,我想在脚本的开头开始output_com,输出到某种高容量的fifo,做其他需要完成的命令然后用fifo执行input_com在输入。像这样的:
#!/bin/bash
#
mkfifo /tmp/fifo
output_com > /tmp/fifo &
somecommand1
somecommand2
input_com < /tmp/fifo
不幸的是,fifos 的缓冲区大小对于我的用例来说太小了,所以output_com 在input_com 开始读取之前很快就被阻塞了。
这些到命令之间共享的数据量可以从 500MB 到大约 1GB 不等。
是否有一些我不知道的机制、工具或概念可以让output_com 在input_com 开始读取之前开始缓冲fifo 上的许多MB?
例如,如果 fifo 缓冲区可以由 tmp 文件(hdd 用作缓冲区)烘焙,那就太好了,但我还没有找到如何做到这一点。使用简单的文件是非阻塞的,并使input_com 在output_com 完成之前终止。
【问题讨论】: