在两个命令之间向管道添加一个大缓冲区

Ale*_*uss 24 unix bash

给定表单的bash命令行

commandA | commandB
Run Code Online (Sandbox Code Playgroud)

我想添加一个大小约为1MB的缓冲区,位于commandA和之间commandB.我希望能够以某种形式做到这一点

commandA | BUFFER | commandB
Run Code Online (Sandbox Code Playgroud)

但是用于什么命令BUFFER

备注:我想这样做是为了解耦这两个命令以使它们更好地并行化.问题在于commandB处理大块的数据,这意味着commandA块直到commandB用块完成.所以一切顺序运行:-(

Eug*_*eck 26

BUFFER称为缓冲区.(man 1缓冲区,也许是在apt-get安装缓冲区之后)

  • `-m size` 是总数。如果您需要更细粒度的控制,请一起使用`-s blocksize -b blocks`。 (2认同)

Joh*_*rer 14

还有另一个工具,pv- 管道查看器:

process1 | pv -pterbTCB 1G | process2
Run Code Online (Sandbox Code Playgroud)
  • B 指定缓冲区大小,此处为1 Gigibyte
  • C禁用splice,这是必需的B
  • T 显示缓冲级别
  • pterb 是由于存在而需要的默认显示开关 T

pv可能在mbuffer/buffer不在官方存储库(例如arch linux)中的系统上可用.


seh*_*ehe 6

您可以使用

  • 缓冲区(提到)
  • mbuffer(也适用于solaris,可能还有其他UNIX)

例如

    process1 | mbuffer -m 1024M | process2
Run Code Online (Sandbox Code Playgroud)

使用1G缓冲区