Você pode usar tee
e evitar a substituição do processo:
$ ( cat somefile.txt | tee /dev/fd/3 | nc host port ) 3>&1
O benefício disso é que nc
será executado de forma síncrona. Veja um exemplo de comportamento de substituição de processo assíncrono:
user@hostname $ cat somefile.txt
GET / HTTP/1.0
Host: StackOverflow.com
user@hostname $ cat somefile.txt | tee >(nc stackoverflow.com 80); echo "DONE"
GET / HTTP/1.0
Host: StackOverflow.com
DONE
user@hostname $ HTTP/1.1 301 Moved Permanently
Content-Type: text/html; charset=utf-8
Location: https://stackoverflow.com/
[...]
Observe que ele diz "DONE" e desenha um prompt no meio da saída. Isso não é um problema se nc
for executado de forma síncrona:
user@hostname $ ( cat somefile.txt | tee /dev/fd/3 | nc stackoverflow.com 80 ) 3>&1; echo "DONE"
GET / HTTP/1.0
Host: StackOverflow.com
HTTP/1.1 301 Moved Permanently
Content-Type: text/html; charset=utf-8
Location: https://stackoverflow.com/
[...]
DONE