Я ожидал cat <(cat)
и cat | cat
сделать то же самое: скопировать строки из стандартного ввода в стандартный вывод. Насколько я понимаю, оба выполняли бы cat
в подоболочке, перенаправляли cat
stdout подоболочки во временный именованный канал, а затем выполняли другой cat
в текущей оболочке с его stdin, перенаправленным в канал.
Вместо этого cat <(cat)
позволяет мне печатать на моем терминале, но ни одна из входных строк не копируется и ^D
не дает сигнал EOF
; cat | cat
работает как и ожидалось.
В качестве дальнейшего эксперимента я проверил, cat =(cat)
есть ли схожие трудности cat <(cat)
, но все работает, как я и ожидал: все stdin вплоть до a ^D
копируются в stdout за один раз.
Может кто-нибудь помочь мне понять, что Zsh делает под капотом?
источник
<(cmd)
) на/dev/null
, поэтому поведение отличается (zsh -c 'cat <(cat)'
немедленно возвращается и ничего не выводит).