Normalmente, podemos canalizar stdout para stdin da seguinte maneira:
echo "This is going to stdout" | grep -o going
Suponha que, em vez disso, grep
eu escrevesse um script que lê tanto de stdin quanto de fd3 e, então, emite uma linha de stdin seguida de uma linha de fd3.
Existe alguma sintaxe que me permita configurar três processos A, B, C satisfazendo as seguintes condições?
- O stdout do Processo A foi para o stdin do Processo C.
- O stdout do Processo B foi para o FD 3 do Processo C.
Com substituição de processo:
onde
</dev/null
previneB
o consumo de (partes de) a saída deA
viaB
's stdin. Ler de stdin é relativamente comum, daí a precaução. Alternativamente:onde
3<&-
fecha o fd3 paraA
e, portanto, impedeA
o consumo de (partes de) a saída deB
. Ler de fd3 é incomum. Se você sabe queA
não tenta ler de seu fd3, então você pode omitir3<&-
e o código ficará um pouco mais limpo:Sem substituição de processo:
onde
</dev/null 3<&-
impedeA
o consumo de (partes de) a saída do stdin ou fd3 doB
via .A