Eu posso executar estes dois comandos:
nc -l localhost 8888 -v >> output.txt &
(while true;do sleep 1;echo a;done)|nc localhost 8888 &
Tudo funciona conforme o esperado com o output.txt
preenchimento de "a"s (de terminal diferente). Mas se digitar um único caractere no terminal executando os trabalhos em segundo plano, o envio nc
mudará Running
para Stopped
:
$ jobs
[1]+ Stopped nc -l localhost 8888 -v >> output.txt
[2]- Running ( while true; do
sleep 1; echo a;
done ) | nc localhost 8888 &
Observe também que ele perde seu "background" e comercial. Não sei por onde começar a depurar isso. Esse é o comportamento esperado? Obrigado.
Mac OSX 10.9, GNU Bash 3.2.52
netcat é bidirecional. Ele copia do soquete para stdout e para o soquete de stdin. Quando você pressiona uma tecla, ele percebe que os dados estão disponíveis no stdin (o tty) e tenta lê-los. Os trabalhos em segundo plano não têm permissão para ler o tty, portanto, ele é suspenso.
Se você não pretende enviar nenhum dado no soquete, adicione
</dev/null
ao seu comando netcat.E é normal que o
jobs
comando adicione ou remova o e comercial quando um trabalho muda de estado.