Saya menjalankan perintah berikut dari skrip:
echo '{"hostUp": true}' | sudo /usr/local/bin/netcat localhost 8001
Namun, klien netcat tetap terbuka tanpa batas. Bagaimana saya bisa menutup koneksi setelah data ini dikirim?
Saya menjalankan perintah berikut dari skrip:
echo '{"hostUp": true}' | sudo /usr/local/bin/netcat localhost 8001
Namun, klien netcat tetap terbuka tanpa batas. Bagaimana saya bisa menutup koneksi setelah data ini dikirim?
Jawaban:
Kedua jawaban lain -c
dan yang -q
diberikan adalah benar dalam konteks yang benar, tetapi mungkin membantu untuk merangkum mengapa ada beberapa jawaban dan memberikan solusi yang lebih umum.
Opsi-opsi berbeda ini melakukan hal yang sama tetapi implementasi netcat berbeda:
-c
Implementasi GNU dari netcat-q
Implementasi OpenBSD dari netcat. -w
(lainnya?) Implementasi OpenBSD dari netcat. Beberapa versi memerlukan int untuk menentukan jumlah detik untuk menunggu sebelum berhenti untuk opsi -q
dan -w
. Int ini harus > 0
atau >= 0
, tergantung pada versinya.
Jika Anda menerapkan sesuatu di beberapa mesin dan tidak yakin mereka menggunakan implementasi netcat yang sama, Anda dapat mempertimbangkan untuk membungkus panggilan netcat Anda dengan timeout
program untuk mematikan netcat setelah beberapa detik.
timeout 5 echo '{"hostUp": true}' | netcat localhost 8001
Pendekatan ini agak canggung karena menempatkan batas atas pada eksekusi netcat terlepas dari apakah atau tidak berhasil mengirim data, tetapi jika Anda mengirim sejumlah kecil data dan memiliki beberapa detik untuk cadangan maka ini harus bekerja dengan implementasi netcat.
Dalam kasus saya, salinan netcat yang saya gunakan pada Mac saya diinstal melalui Homebrew (v 0.7.1) tidak memiliki opsi -q, tapi saya bisa menggunakan opsi -c untuk menutup STDIN EOF dan meletakkan seluruh perintah dalam satu lingkaran:
while true ; do printf 'HTTP/1.1 200 OK\r\n\r\ncool, thanks' | netcat -l -c -p 8888 ; done
Di server Ubuntu 18.04 saya harus menggunakan yang berikut: (ditemukan di halaman manual)
echo '{"hostUp": true}' | sudo /usr/local/bin/netcat -N localhost 8001
Jelas -N
ini mirip dengan -q
atau -c
pada distro lain