发送数据后如何自动关闭netcat连接?

Jus*_*zer 39 linux command-line-interface netcat echo

我正在从脚本执行以下命令:

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

但是,netcat 客户端会无限期地保持打开状态。发送此数据后如何关闭连接?

7yl*_*l4r 27

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

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

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

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

如果您在多台机器上实现某些东西并且不确定它们使用相同的 netcat 实现,您可以考虑用timeout程序包装您的 netcat 调用以在几秒钟后杀死 netcat。

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

这种方法有点笨拙,因为无论是否成功发送数据,它都对 netcat 的执行设置了上限,但是如果您正在发送少量数据并且有几秒钟的空闲时间,那么这应该可以工作使用任何 netcat 实现。


cuo*_*glm 5

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

$ echo '{"hostUp": true}' | sudo /usr/local/bin/netcat -q 5 localhost 8001    
Run Code Online (Sandbox Code Playgroud)