将 printf 与 netcat 一起使用

将 printf 与 netcat 一起使用

我创建了一个小命令来将 TCP 消息发送到可以切换输出的“IP 中继单元”。

printf "setstate,1:1,1\r" | nc ip.ip.ip.ip port

有时这实际上效果很好。由于 printf 在 Linux 和 Mac 上都可以工作,我认为它必须与 netcat 一起做一些事情。我注意到在 netcat 上使用 -v 提高了正确运行的次数,但这似乎是一个非常乏味的解决方法。

后来我找到了 nc -i 选项,添加了 1 秒的超时,这尚未导致错误(在 Linux 或 OSX 上),尽管它确实减少了执行时间,但仍然不是 100% 干净的修复。

手册页实际上表明可以通过管道输入 nc 命令,但它没有提到任何可能的竞争条件。

这是预期的行为吗?有没有一种干净的方法来解决这个问题? (比如“--only-send-when-connection-is-complete”)或者我可以实际检查它是否是竞争条件?

答案1

您可以检查是否存在活动连接:

nc -v <HOST> <PORT> </dev/null; echo $?

如果上面的命令返回值0,则连接成功,您可以printf发送消息,否则(值为1),则您知道连接被拒绝或超时等。

相关内容