मैं एक स्क्रिप्ट से निम्नलिखित कमांड निष्पादित कर रहा हूं:
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
नेटकैट का जीएनयू कार्यान्वयन-q
नेटबैकट का ओपनबीएसडी कार्यान्वयन। -w
(अन्य?) नेटबैट का ओपनबीएसडी कार्यान्वयन। कुछ संस्करणों को -q
और -w
विकल्पों के लिए छोड़ने से पहले प्रतीक्षा करने के लिए सेकंड की संख्या निर्दिष्ट करने के लिए एक इंट की आवश्यकता होती है । यह इंट संस्करण के आधार पर होना चाहिए > 0
या >= 0
।
यदि आप कई मशीनों में कुछ लागू कर रहे हैं और यह सुनिश्चित नहीं कर रहे हैं कि वे netcat के समान कार्यान्वयन का उपयोग करें, तो आप timeout
कुछ ही सेकंड के बाद netcat को मारने के लिए प्रोग्राम के साथ अपने netcat कॉल को रैप करने पर विचार कर सकते हैं ।
timeout 5 echo '{"hostUp": true}' | netcat localhost 8001
यह दृष्टिकोण थोड़ा अनाड़ी है क्योंकि यह नेटकैट के निष्पादन पर एक ऊपरी सीमा रखता है, भले ही वह सफलतापूर्वक डेटा भेज रहा हो या नहीं, लेकिन यदि आप कम मात्रा में डेटा भेज रहे हैं और कुछ सेकंड बचे हैं, तो यह काम करना चाहिए किसी भी netcat कार्यान्वयन के साथ।
मेरे मामले में, मैं नेटब्रेक की प्रतिलिपि जो अपने मैक पर Homebrew (v 0.7.1) के माध्यम से स्थापित कर रहा था, में -q विकल्प नहीं था, लेकिन मैं STDIN EOF को बंद करने के लिए -c विकल्प का उपयोग करने में सक्षम था एक लूप में पूरी कमांड:
while true ; do printf 'HTTP/1.1 200 OK\r\n\r\ncool, thanks' | netcat -l -c -p 8888 ; done
Ubuntu 18.04 सर्वर पर मुझे निम्नलिखित का उपयोग करना पड़ा: (मैन पेजों में पाया गया)
echo '{"hostUp": true}' | sudo /usr/local/bin/netcat -N localhost 8001
जाहिर है -N
के समान है -q
या -c
अन्य distros पर