Bir komut dosyasından aşağıdaki komutu yürütüyorum:
echo '{"hostUp": true}' | sudo /usr/local/bin/netcat localhost 8001
Ancak, netcat istemcisi süresiz olarak açık kalır. Bu veriler gönderildikten sonra bağlantıyı nasıl kapatabilirim?
Bir komut dosyasından aşağıdaki komutu yürütüyorum:
echo '{"hostUp": true}' | sudo /usr/local/bin/netcat localhost 8001
Ancak, netcat istemcisi süresiz olarak açık kalır. Bu veriler gönderildikten sonra bağlantıyı nasıl kapatabilirim?
Yanıtlar:
Hem diğer cevaplar -c
hem de -q
verilenler doğru bağlamda doğrudur, ancak neden birden fazla cevap olduğunu özetlemek ve daha genel bir çözüm vermek yardımcı olabilir.
Bu farklı seçenekler aynı şeyi yapar, ancak netcat'in farklı uygulamalarıdır:
-c
Netcat'in GNU uygulaması-q
Netcat'in OpenBSD uygulaması. -w
(diğer?) Netcat'in OpenBSD uygulaması. Bazı sürümler, -q
ve -w
seçeneklerinden çıkmadan önce beklenecek saniye sayısını belirtmek için bir int gerektirir . Bu int , sürüme bağlı olarak > 0
veya olmalıdır >= 0
.
Birden fazla makineye bir şey uyguluyorsanız ve aynı netcat uygulamasını kullandıklarından emin değilseniz, timeout
birkaç saniye sonra netcat'i öldürmek için netcat çağrınızı programla tamamlamayı düşünebilirsiniz .
timeout 5 echo '{"hostUp": true}' | netcat localhost 8001
Bu yaklaşım biraz beceriksizdir, çünkü veriyi başarılı bir şekilde gönderip göndermediğine bakılmaksızın netcat'in yürütülmesinde bir üst sınır koyar, ancak az miktarda veri gönderiyorsanız ve yedeklemek için birkaç saniyeniz varsa, bu işe yaramalıdır herhangi bir netcat uygulaması ile.
Benim durumumda, Homebrew (v 0.7.1) aracılığıyla yüklü Mac'imde kullandığım netcat kopyasının -q seçeneği yoktu, ancak STDIN EOF'u kapatmak ve koymak için -c seçeneğini kullanabildim bir döngüdeki tüm komut:
while true ; do printf 'HTTP/1.1 200 OK\r\n\r\ncool, thanks' | netcat -l -c -p 8888 ; done
Ubuntu 18.04 sunucusunda aşağıdakileri kullanmak zorunda kaldım: (man sayfalarında bulundu)
echo '{"hostUp": true}' | sudo /usr/local/bin/netcat -N localhost 8001
Açıkçası diğer dağıtımlara -N
benzer -q
veya-c