Используя ZSH, я пытаюсь обернуть команду sed в функцию, а затем использовать ее, смешивая каналы с заменой процесса. Поясню на примере:
$ echo "test text" | gzip > myfile.gz
$ sed $'s,\x1b\\[[0-9;]*[a-zA-Z],,g' <(zcat myfile.gz) | more
test text
$ ncat() { sed $'s,\x1b\\[[0-9;]*[a-zA-Z],,g' $@; }
$ zcat myfile.gz | ncat | more
test text
$ ncat <(zcat myfile.gz) | more
sed: can't read /proc/self/fd/13: No such file or directory
Как видите, в этих 2-х из этих 3-х вариантов использования работают. Последнее меня здесь интригует. (Обратите внимание, что все команды работают с bash)
Можете ли вы объяснить, почему выходные данные функции, использующей подстановку процессов на входе, нельзя использовать через канал?
Я не ищу обходной путь, чтобы просто заставить мой пример работать. Я ищу объяснение, потому что я не мог его найти.
FYI sed
здесь не имеет значения, я пробовал с несколькими другими командами (echo, cat...) и получил тот же результат.
<(...)
? - person Barmar   schedule 06.05.2019