スクリプトから次のコマンドを実行しています。
echo '{"hostUp": true}' | sudo /usr/local/bin/netcat localhost 8001
ただし、netcatクライアントは無期限に開いたままになります。このデータが送信されたら、どうすれば接続を閉じることができますか?
スクリプトから次のコマンドを実行しています。
echo '{"hostUp": true}' | sudo /usr/local/bin/netcat localhost 8001
ただし、netcatクライアントは無期限に開いたままになります。このデータが送信されたら、どうすれば接続を閉じることができますか?
回答:
他の回答-c
も-q
与えられたものも正しい文脈では正しいが、複数の回答がある理由を要約し、より一般的な解決策を提供するのに役立つかもしれない。
これらの異なるオプションは同じことをしますが、netcatの異なる実装です:
-c
netcatのGNU実装-q
netcatのOpenBSD実装。 -w
(その他?)netcatのOpenBSD実装。 一部のバージョンでは-q
、-w
オプションを終了する前に待機する秒数を指定するintが必要です。このintは、バージョンに応じて> 0
または>= 0
でなければなりません。
複数のマシンに何かを実装していて、それらがnetcatの同じ実装を使用するかどうかわからない場合はtimeout
、数秒後にnetcatをプログラムでラップしてnetcat を強制終了することを検討してください。
timeout 5 echo '{"hostUp": true}' | netcat localhost 8001
このアプローチは、データを正常に送信しているかどうかに関係なくnetcatの実行に上限を設定するため、少し面倒です。すべてのnetcat実装で。
Ubuntu 18.04サーバーでは、次のものを使用する必要がありました(manページにあります)。
echo '{"hostUp": true}' | sudo /usr/local/bin/netcat -N localhost 8001
明らかに、他のディストリビューションに-N
似ている-q
か-c
、他のディストリビューションにあります