Я запускаю сценарий оболочки, который передает данные от одного процесса к другому
process_a | process_b
Кто-нибудь знает способ узнать, сколько байтов было передано между двумя программами? Единственное решение, которое я могу придумать на данный момент, - написать небольшую программу на c, которая читает из stdin, записывает в stdout и подсчитывает все переданные данные, сохраняя счет в переменной окружения, например:
process_a | count_bytes | process_b
У кого-нибудь есть более аккуратное решение?
exec
и просто вывести в файл напрямую?input-command | dd 2>~/fred | output-command
Используйте pv the pipe viewer. Это отличный инструмент. Когда вы узнаете об этом, вы никогда не узнаете, как вы жили без него.
Он также может показать вам индикатор выполнения и «скорость» передачи.
источник
cat file | pv -b
вернет размер файла.process_a | tee >(process_b) | wc --bytes
может работать. Затем вы можете перенаправитьwc
счет туда, где он вам нужен. Если что-тоprocess_b
выводит вstdout
/stderr
вам, вероятно, нужно будет куда-то перенаправить это, если только/dev/null
.Для слегка надуманного примера:
В качестве объяснения:
tee
позволяет вам направлять вывод в несколько файлов (плюс стандартный вывод), а>()
конструкция является «заменой процесса» в bash, которая в этом случае делает процесс похожим на файл только для записи, так что вы можете перенаправить на процессы, а также на файлы ( см. здесь или этот вопрос + ответ для примера использованияtee
для отправки вывода во многие процессы).источник
Я знаю, что опаздываю на вечеринку, но я думаю, что у меня есть хороший ответ, который может улучшить эту полезную тему.
Это сочетание @Phil P и @David Spillett ответа, но:
Число байтов выводится в стандартный вывод вместе с любым выводом процесса process_b.
Вы можете использовать префикс для идентификации строки, содержащей байты, при работе с выводом (
Bytes:
в примере).ВНИМАНИЕ:
Не полагайтесь на порядок строк в выходных данных
. Порядок непредсказуем и всегда может отличаться даже при вызове одного и того же сценария с одинаковыми параметрами!
источник