Мне странно, что конвейерная линия |
ведет себя по-разному для следующих команд:
curl http://norvig.com/big.txt | sort
curl http://norvig.com/big.txt | grep employ
В первой команде конвейер ждет, пока выполнение curl
завершается. Находясь во второй команде, он передает промежуточный вывод в grep
, пока выполняется curl
.
Что определяет поведение конвейера?
ОБНОВЛЕНИЕ:
Проблема не в том, что могут делать sort
и grep
. Проблема в том, откуда это известно трубопроводу?
Я думаю, причина в следующем:
sort
не может начать сортировку (или, по крайней мере, не может начать печать результата), пока не закончит чтение ввода.
grep
может начать работу и начать печатать результат, как только он начнет получать ввод.