我正在尝试连续监听端口5000并打印第一行消息,但程序在一次迭代后停止。我正在使用以下命令 -
nc -k -l 5000 | head -n 1
我在-c选项中使用了nc,但程序在一次迭代后仍然停止。这个命令有什么问题?
答案 0 :(得分:1)
这不是那么简单。第二个nc
只能在之前的完整运行后启动。但它无法完成,因为nc
有一个错误:它无法检测远程端是否关闭其套接字。因此,第一个nc永远不会停止,因此第二个nc无法启动。
nc
的开发人员说,这是TCP协议的固有问题,我认为他们没有权利[但这只是我的意见]。
如果你想在TCP端口上实际监听一个脚本,那么一个可行的解决方案就是将这个head -1
放入一个脚本中,然后从inetd调用这个脚本。
一些棘手的黑客攻击也可以,例如,在第一行之后杀死第一个nc
,所以:
nc -k -l 5000|(read;echo $REPLY;killall -9 nc)
虽然它们非常有趣,但这些工具对于高效环境来说还不够稳定。 : - )