Я виконую наступну команду зі сценарію:
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
Впровадження GNU netcat-q
Реалізація OpenBSD netcat. -w
(інше?) OpenBSD реалізація netcat. Деякі версії вимагають, щоб int вказав кількість секунд, які потрібно чекати, перш ніж вийти з параметрів -q
та -w
. Цей вклад повинен бути > 0
або >= 0
, залежно від версії.
Якщо ви реалізуєте щось на декількох машинах і не впевнені, що вони використовують ту саму реалізацію netcat, ви можете розглянути можливість завершення виклику Netcat timeout
програмою, щоб знищити netcat через кілька секунд.
timeout 5 echo '{"hostUp": true}' | netcat localhost 8001
Цей підхід є дещо незграбним, оскільки він ставить верхню межу виконання netcat незалежно від того, чи успішно він надсилає дані, але якщо ви надсилаєте невелику кількість даних і маєте кілька секунд, щоб запасти, то це повинно працювати з будь-якою реалізацією netcat.
У моєму випадку копія netcat, яку я використовував на своєму Mac, встановленому через Homebrew (v 0.7.1), не мала опції -q, але мені вдалося скористатися параметром -c, щоб закрити на STDIN EOF і поставити вся команда в циклі:
while true ; do printf 'HTTP/1.1 200 OK\r\n\r\ncool, thanks' | netcat -l -c -p 8888 ; done
На сервері Ubuntu 18.04 мені довелося використовувати наступне: (знайдено на сторінках man)
echo '{"hostUp": true}' | sudo /usr/local/bin/netcat -N localhost 8001
Очевидно , що -N
аналогічно -q
або -c
на інших дистрибутивах