Je m'y attendais cat <(cat)
et cat | cat
de faire la même chose: copier des lignes de stdin stdout. Ma compréhension était que les deux exécuteraient un cat
dans un sous-shell, redirigeraient la sortie cat
standard du sous-shell vers un tube nommé temporaire, puis en exécuteraient un autre cat
dans le shell actuel avec son stdin redirigé vers le tube.
Au lieu de cela, cat <(cat)
permet de taper sur mon terminal, mais aucune des lignes d'entrée n'est copiée et ^D
ne parvient pas à signaler EOF
; cat | cat
fonctionne comme prévu cependant.
Comme une autre expérience, j'ai vérifié si cat =(cat)
a des difficultés similaires cat <(cat)
, mais cela fonctionne comme prévu: tous les stdin jusqu'à un ^D
sont copiés dans stdout en une seule fois.
Quelqu'un peut-il m'aider à comprendre ce que zsh fait sous le capot?
la source
<(cmd)
) vers/dev/null
, de sorte que le comportement diffère (zsh -c 'cat <(cat)'
retourne immédiatement et ne produit rien).