我可以运行这两个命令:
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命令添加或删除&符号是正常的。