Я выполняю следующую команду из скрипта:
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
опций. Это int должно быть > 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 мне пришлось использовать следующее: (найдено в справочных страницах)
echo '{"hostUp": true}' | sudo /usr/local/bin/netcat -N localhost 8001
Очевидно, что -N
это похоже на -q
или -c
на других дистрибутивах