Wykonuję następujące polecenie ze skryptu:
echo '{"hostUp": true}' | sudo /usr/local/bin/netcat localhost 8001
Jednak klient Netcat pozostaje otwarty przez czas nieokreślony. Jak mogę zamknąć połączenie po wysłaniu tych danych?
Wykonuję następujące polecenie ze skryptu:
echo '{"hostUp": true}' | sudo /usr/local/bin/netcat localhost 8001
Jednak klient Netcat pozostaje otwarty przez czas nieokreślony. Jak mogę zamknąć połączenie po wysłaniu tych danych?
Odpowiedzi:
Zarówno inne, jak -ci -qpodane odpowiedzi są poprawne we właściwym kontekście, ale może pomóc w podsumowaniu, dlaczego istnieje wiele odpowiedzi i dać bardziej ogólne rozwiązanie.
Te różne opcje robią to samo, ale są różnymi implementacjami netcat:
-c Implementacja GNU netcat-q Implementacja netcat w OpenBSD. -w (inne?) Implementacja netcat w OpenBSD. Niektóre wersje wymagają od int określenia liczby sekund oczekiwania przed wyjściem z opcji -qi -w. To int musi być > 0lub >= 0, w zależności od wersji.
Jeśli implementujesz coś na wielu komputerach i nie masz pewności, czy używają one tej samej implementacji netcata, możesz rozważyć połączenie twojego wywołania netcat z timeoutprogramem, aby zabić netcat po kilku sekundach.
timeout 5 echo '{"hostUp": true}' | netcat localhost 8001
To podejście jest nieco niezdarne, ponieważ nakłada górny limit na wykonanie netcata, niezależnie od tego, czy pomyślnie wysyła dane, ale jeśli wysyłasz niewielką ilość danych i masz kilka sekund do stracenia, to powinno działać z dowolną implementacją netcat.
W moim przypadku kopia netcata, której używałem na komputerze Mac, zainstalowana przez Homebrew (wersja 0.7.1) nie miała opcji -q, ale mogłem użyć opcji -c, aby zamknąć STDIN EOF i umieścić całe polecenie w pętli:
while true ; do printf 'HTTP/1.1 200 OK\r\n\r\ncool, thanks' | netcat -l -c -p 8888 ; done
Na serwerze Ubuntu 18.04 musiałem użyć następujących elementów: (znaleziono na stronach podręcznika)
echo '{"hostUp": true}' | sudo /usr/local/bin/netcat -N localhost 8001
Oczywiście -Njest podobny -qlub -cw innych dystrybucjach