J'exécute la commande suivante à partir d'un script:
echo '{"hostUp": true}' | sudo /usr/local/bin/netcat localhost 8001
Cependant, le client netcat reste ouvert indéfiniment. Comment puis-je fermer la connexion une fois ces données envoyées?
J'exécute la commande suivante à partir d'un script:
echo '{"hostUp": true}' | sudo /usr/local/bin/netcat localhost 8001
Cependant, le client netcat reste ouvert indéfiniment. Comment puis-je fermer la connexion une fois ces données envoyées?
Réponses:
Les deux autres réponses -c
et -q
données sont correctes dans le bon contexte, mais cela peut aider à résumer pourquoi il y a plusieurs réponses et donner une solution plus générale.
Ces différentes options font la même chose mais sont des implémentations différentes de netcat:
-c
Implémentation GNU de netcat-q
Implémentation OpenBSD de netcat. -w
(autre?) Implémentation OpenBSD de netcat. Certaines versions nécessitent un int pour spécifier le nombre de secondes à attendre avant de quitter pour les options -q
et -w
. Cet int doit être > 0
ou >= 0
, selon la version.
Si vous implémentez quelque chose sur plusieurs machines et n'êtes pas sûr qu'elles utilisent la même implémentation de netcat, vous pouvez envisager de boucler votre appel netcat avec le timeout
programme pour tuer netcat après quelques secondes.
timeout 5 echo '{"hostUp": true}' | netcat localhost 8001
Cette approche est un peu maladroite car elle impose une limite supérieure à l'exécution de netcat, qu'il envoie ou non des données avec succès, mais si vous envoyez une petite quantité de données et avez quelques secondes à perdre, cela devrait fonctionner avec n'importe quelle implémentation netcat.
Dans mon cas, la copie de netcat que j'utilisais sur mon Mac installé via Homebrew (v 0.7.1) n'avait pas d'option -q, mais j'ai pu utiliser l'option -c pour fermer sur STDIN EOF et mettre le commande entière dans une boucle:
while true ; do printf 'HTTP/1.1 200 OK\r\n\r\ncool, thanks' | netcat -l -c -p 8888 ; done
Sur le serveur Ubuntu 18.04, j'ai dû utiliser ce qui suit: (trouvé dans les pages de manuel)
echo '{"hostUp": true}' | sudo /usr/local/bin/netcat -N localhost 8001
Évidemment, le -N
est similaire à -q
ou -c
sur d'autres distributions