Тестирую простой пример:
mkfifo something123.txt
cat something123.txt | gzip -7 -c > out.gz &
echo "foo" > something123.txt
sleep 1
echo "bar" > something123.txt
sleep 2
echo "baz" > something123.txt
sleep 1
rm something123.txt
Ожидаю, что когда распакую out.gz - увижу в нём три строки foo-bar-baz. По факту терминал зависает после первой записи в пайп (foo). Если прервать операцию - в распакованном out.gz видим только запись о foo (bar нету). Такое чувство, что пайп закрылся после foo.
А если переписать вот так, то всё начинает работать, как мной ожидалось:
exec 3> >(gzip -7 -c > out.gz)
echo "foo" >&3
sleep 1
echo "bar" >&3
sleep 2
echo "baz" >&3
sleep 1
exec 3>&-
…терминал не зависает, создаётся файлик out.gz, который распаковываем и получаем в нём три строки:
gunzip < out.gz > out.txt && cat out.txt
foo
bar
baz
Я что-то неправильно понимаю про именованный пайп и в первом случае ожидаю от него чего-то ему не свойственного?