Каким образом конвейерные команды sed управляют информацией о потоках во входном и выходном пространстве? - PullRequest
1 голос
/ 08 октября 2019

Я передаю несколько команд sed, но я не понимаю, как передается информация.

Пример:

command1 | command 2 | command3

Ожидает ли конвейер завершения всех операций command1 ипередается в пространство вывода перед тем, как передать всю область вывода команды 1 в область ввода command2;или как только строка из command1 передается в выходное пространство, она немедленно передается в область ввода команды 2, не дожидаясь полного заполнения оставшейся части выходного пространства в command1 оставшимися строками?

Я надеюсь, что кто-то может кратко прояснить это.

Ответы [ 2 ]

1 голос
/ 08 октября 2019

Команды в конвейере выполняются параллельно. Все они запускаются одновременно и работают одновременно. Правый процесс получает вывод левого процесса по мере его генерирования. Не нужно ждать окончания левого процесса.

Обычно с каналом связан небольшой буфер, скажем, 4 КБ. Обработка обычно происходит в чанках размером 4 КБ, а не построчно. * * * * * * * * * * * * * * * * * * * * * * * * * * *

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *. программы должны выполняться параллельно, тогда вам нужно будет выполнить их отдельно и сохранить их выходные данные во временных файлах.
command1 > cmd1.out
command2 < cmd1.out > cmd2.out
command3 < cmd2.out
rm cmd1.out cmd2.out
0 голосов
/ 08 октября 2019

Оболочка запускает три процесса и запускает их все одновременно. Процесс 1 (первый sed) отправит выходные данные процессу 2 (второй sed), который будет ожидать готовности ввода.

В принципе это можно заменить тремя последовательными выполнениями sed с временными файлами, хранящимивывод одной фазы для чтения следующей фазой.

...