J'essaye de faire un script de chien de garde bash qui doit vérifier si le port est ouvert, basé sur le statut de sortie, sinon il devrait démarrer le démon. Le problème est que je ne parviens pas à éviter que le script produise des informations en redirigeant STDOUT et STDERR.
nc -zv 1.2.3.4 55 | grep " open " >/dev/null 2>&1
ou
nc -zv 1.2.3.4 55 | grep " open " 2>&1 >/dev/null
ou
nc -zv 1.2.3.4 55 | grep " open " &>/dev/null
retourne quand même
'FQDN_hostname_or_domainname [1.2.3.4] 55 (?) open'
Néanmoins, ce combo fonctionne avec d'autres commandes, telles que netstat
. Est-ce quelque chose à propos de netcat, ou peut-être à propos de la syntaxe bash? S'il vous plaît laissez-moi savoir ce que je me trompe.
Le problème n'a rien à voir avec nc
ou netcat
ou l'un de leurs semblables. Vous exécutez deux commandes ici, nc
et grep
, mais vous ne redirigez que la sortie de grep
. Ce que tu veux faire c'est:
nc -zv 1.2.3.4 55 &>/dev/null
Bien entendu, cela serait inutile car s'il n'y a pas de sortie, vous ne pouvez pas grep
. Le drapeau -q
de grep est destiné à:
-q, --quiet, --silent
Quiet; do not write anything to standard output. Exit
immediately with zero status if any match is found, even if an
error was detected. Also see the -s or --no-messages option.
Donc, ce que vous recherchez ressemble à ceci:
nc -zv 1.2.3.4 55 2>/dev/null | grep -q " open " && start_daemon
Ou, si vous devez également analyser stderr, ceci:
nc -zv 1.2.3.4 55 |& grep -q " open " && start_daemon
Géré pour que le script s'exécute correctement en utilisant le statut de sortie de nc de netcat, tout en l'exécutant sans l'option -v. Quoi qu'il en soit, il semble que la sortie de netcat ne soit pas acheminée dans grep. Je suppose que cela pourrait être causé par une sorte de fourrage.
MISE À JOUR:
Comme Terdon l'a mentionné dans un commentaire, une partie de la sortie de nc
/netcat
est imprimée sur stderr, une partie sur stout. Donc, la fusion de ces deux fichiers avant de rediriger vers grep fait l'affaire:
netcat -zvw1 1.2.3.4 55 2>&1 | grep "open"