我可以运行这两个命令:
nc -l localhost 8888 -v >> output.txt &
(while true;do sleep 1;echo a;done)|nc localhost 8888 &
使用“a”(来自不同终端)填充时,所有操作均按预期进行output.txt
。但如果在运行后台作业的终端中输入单个字符,则发送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
答案1
netcat 是双向的。它复制从将套接字连接到 stdout,以及到从 stdin 读取套接字。当您按下某个键时,它会注意到 stdin(tty)上有可用数据并尝试读取它。后台作业不允许从 tty 读取,因此它会被暂停。
如果您不打算在套接字上发送任何数据,则应将其添加</dev/null
到您的 netcat 命令中。
jobs
当作业改变状态时,命令添加或删除“与”符号是正常的。