自动closuresnetcat连接

我从脚本执行以下命令:

echo '{"hostUp": true}' | sudo /usr/local/bin/netcat localhost 8001

但是,netcat客户端将无限期地保持打开状态。 一旦这个数据被发送,我怎样才能closures连接?

您可以使用-q参数,但会导致netcat服务器也closures。

 $ echo '{"hostUp": true}' | sudo /usr/local/bin/netcat -q localhost 8001 5 

在我的情况下,我通过Homebrew(v 0.7.1)安装的Mac上使用的netcat副本没有-q选项,但是我可以使用-c选项在STDIN EOF上closures,整个命令在一个循环中:

 while true ; do printf 'HTTP/1.1 200 OK\r\n\r\ncool, thanks' | netcat -l -c -p 8888 ; done 

给出的其他答案-c-q在正确的上下文中是正确的,但是它可能有助于总结为什么有多个答案并给出更一般的解决scheme。

这些不同的选项做同样的事情,但是是不同的netcat实现:

  • -c netcat的GNU实现
  • netcat的OpenBSD实现。
  • -w (其他?)netcat的OpenBSD实现。

某些版本需要int来指定在退出-q-w选项之前要等待的秒数。 这个int必须是> 0>= 0 ,具体取决于版本。

如果你在多台机器上实现了一些东西,但是不确定他们是否使用了相同的netcat实现,你可能会考虑用timeout程序来包装你的netcat调用,以在几秒钟后终止netcat。

timeout 5 echo '{"hostUp": true}' | netcat localhost 8001

这种方法有点笨拙,因为它对netcat的执行提出了一个上限,无论它是否成功发送数据,但是如果你发送less量的数据,并有几秒的时间,那么这应该工作与任何netcat实施。