Проблема, с которой вы столкнулись, может быть сведена к следующему:
seq 50000 | tee >(wc) >(exit) >/dev/null
Если один из потоков tee
пишет, что возвращает ошибку, tee
завершается. Поскольку каналы обычно буферизуются буфером 4K, для wc
достаточно захватить некоторые строки и обработать их.
head -n2
закрывает поток после печати двух строк.
Вы можете видетьошибка, сказав tee
что-то напечатать при ошибках:
# seq 50000 | tee --output-error=exit >(wc) >(exit) >/dev/null
tee: /dev/fd/62: broken pipe
Вы можете устранить проблему с помощью -p
или --output-error=warn
, чтобы указать tee
продолжить после ошибок при записи в каналы:
seq 50000 | tee -p >(wc) >(head -n2) >/dev/null
или используйте команду, которая не завершается после обработки ввода, например sed
:
seq 50000 | tee >(wc) >(sed -n '1,2p') >/dev/null