![Digitar no terminal interfere na execução do `nc` em segundo plano?](https://rvso.com/image/668804/Digitar%20no%20terminal%20interfere%20na%20execu%C3%A7%C3%A3o%20do%20%60nc%60%20em%20segundo%20plano%3F.png)
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 output.txt
preenchimento de "a"s (caudal de terminal diferente). Mas se digitar um único caractere no terminal que executa os trabalhos em segundo plano, o envio nc
passa de 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 e comercial de "fundo". Não sei por onde começar a depurar isso. Esse é o comportamento esperado? Obrigado.
Mac OSX 10.9, GNU Bash 3.2.52
Responder1
netcat é bidirecional. Ele copiadeo soquete para stdout eparao soquete do stdin. Ao pressionar uma tecla, ele percebe que há dados 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, você deve adicionar </dev/null
ao seu comando netcat.
E é normal que o jobs
comando adicione ou remova o e comercial quando um trabalho muda de estado.