我创建了一个小命令来将 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
),则您知道连接被拒绝或超时等。