Pipe
將 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”)或者我可以實際檢查它是否是競爭條件?
您可以檢查是否存在活動連接:
nc -v <HOST> <PORT> </dev/null; echo $?
如果上述命令返回 value
0
,則連接成功,您可以printf
發送消息,否則(值為1
),則您知道您的連接被拒絕或超時等。