Добавить большой буфер в канал между двумя командами - PullRequest
22 голосов
/ 19 декабря 2011

Учитывая командную строку bash вида

commandA | commandB

Я хочу добавить буфер размером ~ 1 МБ, который находится между commandA и commandB.Я ожидаю, что смогу сделать это с чем-то вроде

commandA | BUFFER | commandB

, но какую команду использовать для BUFFER?

Примечание: Я хочу сделать это по порядкуразделить две команды, чтобы сделать их лучше распараллелить.Проблема в том, что commandB обрабатывает данные большими кусками, что в настоящее время означает, что commandA блокирует, пока commandB не будет завершен с чанком.Так что все работает последовательно: - (

Ответы [ 4 ]

23 голосов
/ 19 декабря 2011

BUFFER называется буфером.(буфер man 1, может быть, после apt-get install buffer)

11 голосов
/ 13 октября 2016

Есть еще один инструмент, pv - просмотрщик труб:

process1 | pv -pterbTCB 1G | process2
  • B указывает размер буфера, здесь 1 Гигабайт
  • C отключает splice, что требуется для B
  • T показывает уровень буфера
  • pterb - это переключатели дисплея по умолчанию, необходимые из-за наличия T

pv может быть доступно в системах, где mbuffer/buffer отсутствует в официальных репозиториях (например, arch linux).

6 голосов
/ 19 декабря 2011

Вы можете использовать

  • буфер (упомянутый)
  • mbuffer (работает и на солярисе, возможно, в других UNIX)

Например

    process1 | mbuffer -m 1024M | process2

для использования буфера 1G

0 голосов
/ 19 декабря 2011

в качестве альтернативы вы можете использовать именованный канал и запускать их параллельно:

mkfifo myfifo
commandB < myfifo &
commandA > myfifo
rm myfifo
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...