Isso depende do shell e não está documentado no AFAICS. No ksh
e bash
, no primeiro caso, foo
compartilhará o mesmo padrão que bar
. Eles vão lutar pela produção de echo
.
Então, por exemplo,
$ seq 10000 | paste - <(tr 1 X)'
1 X
2 X042
3 X043
4 X044
5 X045
[...]
Você vê evidências de que paste
lê todos os outros blocos de texto da seq
saída enquanto tr
lê os outros.
Com zsh
, obtém o stdin externo (a menos que seja um terminal e o shell não seja interativo, caso em que é redirecionado /dev/null
). ksh
(onde se originou) zsh
e bash
são os únicos reservatórios semelhantes a Bourne com suporte para a substituição do processo AFAIK.
Em echo "bla" | bar < <(foo)
, observe que bar
o stdin será o tubo alimentado pela saída de foo
. Esse é um comportamento bem definido. Nesse caso, parece que foo
stdin é o tubo alimentado por echo
todos ksh
, zsh
e bash
.
Se você deseja ter um comportamento consistente em todas as três conchas e ser à prova de futuro, pois o comportamento pode mudar porque não está documentado, eu escreveria:
echo bla | { bar <(foo); }
Para ter certeza foo
, o stdin também é o cachimbo de echo
(não consigo ver por que você faria isso). Ou:
echo bla | bar <(foo < /dev/null)
Para se certificar de foo
que não ler a partir do tubo de echo
. Ou:
{ echo bla | bar 3<&- <(foo <&3); } 3<&0
Ter foo
stdin o stdin externo como nas versões atuais de zsh
.