2014-04-01 29 views
1

我试图不断地听到端口5000并打印第一行消息,但程序在一次迭代后停止。我正在使用下面的命令 -'nc'命令即使使用-k选项也会停止

nc -k -l 5000 | head -n 1 

我已经使用了nc的-k选项,但程序在一次迭代后仍然停止。这个命令有什么问题?

回答

1

并非如此简单。第二个nc只能在完整运行之前启动。但它不能完成,因为nc有一个错误:它无法检测到远程端是否关闭了它的套接字。因此,第一个nc从不停止,因此第二个不能启动。

nc的开发人员说,这是TCP协议的固有问题,我认为他们没有正确的[但它只是我的意见]。

如果您想要在TCP端口上实际执行脚本侦听,则工作解决方案会将此head -1放入脚本中,并从inetd调用此脚本。

一些棘手的黑客可以工作为好,例如,杀死第一nc第一行后,所以:

nc -k -l 5000|(read;echo $REPLY;killall -9 nc) 

恕我直言,这个工具不是用于生产环境不够稳定,虽然他们可以非常有趣。 :-)

相关问题