Esperaba cat <(cat)
y cat | cat
hacer lo mismo: copiar líneas de stdin a stdout. Comprendí que ambos ejecutarían un cat
en una subshell, redirigirían el cat
stdout de la subshell a una tubería con nombre temporal y luego ejecutarían otro cat
en la shell actual con su stdin redirigido a la tubería.
En cambio, cat <(cat)
me permite escribir en mi terminal, pero ninguna de las líneas de entrada se copia y ^D
no puede señalizar EOF
; cat | cat
funciona como se esperaba sin embargo.
Como otro experimento, verifiqué si cat =(cat)
tiene dificultades similares cat <(cat)
, pero funciona como esperaba: todo el stdin hasta un ^D
se copia en stdout de una vez.
¿Alguien puede ayudarme a entender qué está haciendo zsh bajo el capó?
fuente
<(cmd)
)/dev/null
, por lo que el comportamiento difiere (zsh -c 'cat <(cat)'
regresa de inmediato y no genera nada).