在terminalinput干扰`nc`在后台运行?

我可以运行这两个命令:

nc -l localhost 8888 -v >> output.txt & (while true;do sleep 1;echo a;done)|nc localhost 8888 & 

所有的预期与output.txt填充“a”(从不同的terminal尾)。 但是,如果在运行后台作业的terminal中键入单个字符,发送nc将从Running转为Stopped

 $ jobs [1]+ Stopped nc -l localhost 8888 -v >> output.txt [2]- Running ( while true; do sleep 1; echo a; done ) | nc localhost 8888 & 

还要注意,它丢失了“背景”符号。 不知道从哪里开始debugging这个。 这是预期的行为? 谢谢。

Mac OSX 10.9,GNU Bash 3.2.52

netcat是双向的。 它套接字复制到标准输出,并从标准input套接字。 当您按下某个键时,会注意到stdin(tty)上的数据可用,并尝试读取它。 后台作业不允许从tty中读取,因此被暂停。

如果您不打算在套接字上发送任何数据,则应该将</dev/null添加到netcat命令中。

当作业更改状态时, jobs命令添加或删除&符号是正常的。