Все команды в конвейере запускаются одновременно и выполняются одновременно - команда 2 не ожидает выхода команды 1. Вместо этого конвейеры полагаются на блокировку операций чтения до тех пор, пока предыдущая команда не выдаст какой-либо вывод.
Например, выход (stdout) cat /tmp/f
непосредственно 1 связан с входом /bin/sh -i
; всякий раз, когда sh пытается читать с его стандартного ввода, он блокируется, пока cat не выдаст какой-либо вывод.
1 (Почти напрямую; stdout cat и std sh связаны с двумя концами объекта 'pipe'.)