Jessaie de comprendre ce que grep -v grep
fait ci-dessous:
ssh $server -p $port -o "ConnectTimeout 5" | grep -v "Connection refused" | grep "Connected to" | grep -v grep | wc -l
Ou y a-t-il un meilleur moyen de trouver un test de connexion TCP?
Commentaires
Réponse
Il exclut toutes les lignes contenant la séquence de lettres grep
de la sortie précédente du tube.
Réponse
Si vous voulez vérifier que vous pouvez établir une connexion ssh dans les 5 secondes et exécuter une commande, faites simplement:
if ssh -o BatchMode=yes -o ConnectTimeout=5 -p "$port" "$server" true; then printf "%s\n" "$server is up" fi
Votre commande n’a pas beaucoup de sens. Comme vous ne fournissez pas de commande à exécuter sur le serveur distant, ssh
s’exécutera dans le rlogin
mode, où un pseudo-terminal est demandé et le shell de connexion de lutilisateur distant est lancé (ou éventuellement un ForcedCommand).
Ensuite, vous « appliquez plusieurs filtres à la sortie:
-
grep -v "Connection refused"
: filtrez toute ligne de la sortie qui contientConnection refused
. Cela na pas de sens car ce message derreur sil apparaissait serait écrit sur stderr, pas sur la sortie standard quegrep
filtre, et aussi parce que: -
grep "Connected to"
: sélectionnez uniquement les lignes contenantConnected to
. Cela exclurait également les lignes qui contiennentConnection refused
car il est peu probable quune ligne contienne les deux. -
grep -v grep
, supprimez également les lignes qui contiennentgrep
(il sagirait donc de lignes contenant à la foisConnected to
etgrep
et nonConnection refused
!) -
wc -l
: comptez le nombre de lignes résultantes (donc les lignes dans la sortie standard dessh
« qui contientConnected to
sauf ceux qui contiennent égalementgrep
ouConnection refused
). Notez quewc
affichera ce numéro uniquement lorsque la connexion est fermée, lorsque la session shell est terminée, comme lorsque lutilisateur entreexit
. Mais là encore, puisque lutilisateur ne « verra aucune sortie (puisque tout va àwc
finalement), lutilisateur naura pas la moindre idée quil a besoin dentrerexit
pour mettre fin à cette session.
man grep