我可以运行这两个命令:
nc -l localhost 8888 -v >> output.txt &
(while true;do sleep 1;echo a;done)|nc localhost 8888 &
所有工作都按预期工作,output.txt
填充“a”(来自不同终端)。但是,如果在运行后台作业的终端中键入单个字符,则发送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 &
另请注意,它失去了“背景”与符号。不知道从哪里开始调试这个。这是预期的行为吗?谢谢。
Mac OSX 10.9、GNU Bash 3.2.52
netcat 是双向的。它从套接字复制到标准输出,并从标准输入复制到套接字。当您按下一个键时,它会注意到标准输入(tty)上有可用的数据并尝试读取它。后台作业不允许从 tty 读取,因此它被挂起。
如果您不打算在套接字上发送任何数据,您应该添加
</dev/null
到您的 netcat 命令。jobs
当作业更改状态时,命令添加或删除与号是正常的。