データの送信後にnetcat接続を自動的に閉じる方法は?


22

スクリプトから次のコマンドを実行しています。

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

ただし、netcatクライアントは無期限に開いたままになります。このデータが送信されたら、どうすれば接続を閉じることができますか?

回答:


17

他の回答-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実装で。


5

-qパラメーターを使用できますが、netcatサーバーも閉じられます。

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

3

私の場合、Homebrew(v 0.7.1)経由でインストールしたMacで使用していたnetcatのコピーには-qオプションがありませんでしたが、-cオプションを使用してSTDIN EOFを閉じ、ループ内のコマンド全体:

while true ; do printf 'HTTP/1.1 200 OK\r\n\r\ncool, thanks' | netcat -l -c -p 8888 ; done

1

Ubuntu 18.04サーバーでは、次のものを使用する必要がありました(manページにあります)。

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

明らかに、他のディストリビューションに-N似ている-q-c、他のディストリビューションにあります

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.