Spodziewałem się cat <(cat)
i cat | cat
zrobię to samo: skopiuj wiersze ze standardowego wejścia na standardowe wyjście. Zrozumiałem, że oba wykonałyby a cat
w podpowłoce, przekierowały cat
stdout podpowłoki do tymczasowej nazwanej potoki, a następnie wykonały inną cat
w bieżącej powłoce ze stdin przekierowanym do potoku.
Zamiast tego cat <(cat)
pozwala mi pisać na moim terminalu, ale żadna z linii wejściowych nie jest kopiowana i ^D
nie jest sygnalizowana EOF
; cat | cat
działa zgodnie z oczekiwaniami.
W kolejnym eksperymencie sprawdziłem, czy cat =(cat)
ma podobne trudności cat <(cat)
, ale działa tak, jak się spodziewałem: wszystkie stdin do jednego ^D
są kopiowane na stdout za jednym razem.
Czy ktoś może mi pomóc zrozumieć, co robi Zsh pod maską?
źródło
<(cmd)
) do/dev/null
, więc zachowanie jest inne (zsh -c 'cat <(cat)'
zwraca natychmiast i nic nie wypisuje).