Încerc să înțeleg ce face grep -v grep
mai jos:
ssh $server -p $port -o "ConnectTimeout 5" | grep -v "Connection refused" | grep "Connected to" | grep -v grep | wc -l
Sau există o modalitate mai bună de a găsi testul conexiunii TCP?
Comentarii
Răspundeți
Exclude toate liniile care conțin secvența de litere grep
din ieșirea de conductă anterioară.
Răspuns
Dacă doriți să verificați dacă puteți stabili o conexiune ssh în 5 secunde și executați o comandă, pur și simplu faceți:
if ssh -o BatchMode=yes -o ConnectTimeout=5 -p "$port" "$server" true; then printf "%s\n" "$server is up" fi
Comanda dvs., așa cum este, are puțin sens. Deoarece nu furnizați o comandă pentru a rula pe serverul la distanță, ssh
va rula în rlogin
mode, unde se solicită un pseudo-terminal și se pornește shell-ul de autentificare al utilizatorului la distanță (sau, eventual, un ForcedCommand).
Apoi, aplicați mai multe filtre la ieșire:
-
grep -v "Connection refused"
: filtrați orice linie din ieșirea care conțineConnection refused
. Acest lucru nu are prea mult sens, deoarece mesajul de eroare dacă ar apărea ar fi scris pe stderr, nu ieșirea standard pe caregrep
o filtrează și, de asemenea, pentru că: -
grep "Connected to"
: selectați numai liniile care conținConnected to
. Acest lucru ar exclude, de asemenea, liniile care conținConnection refused
, deoarece este puțin probabil ca o linie să le conțină pe ambele. -
grep -v grep
, de asemenea, eliminați liniile care conțingrep
(astfel încât să fie linii care conțin atâtConnected to
, cât șigrep
și nuConnection refused
!) -
wc -l
: numărați numărul de linii rezultate (deci liniile înssh
„stdout care conținConnected to
cu excepția celor care conțin șigrep
sauConnection refused
). Rețineți căwc
va afișa acel număr numai atunci când conexiunea este închisă, când sesiunea shell a fost încheiată, ca atunci când utilizatorul introduceexit
. Dar, din nou, din moment ce utilizatorul nu va vedea nici o ieșire (deoarece totul merge lawc
în cele din urmă), utilizatorul va avea foarte puține indicii că trebuie să introducăexit
pentru a încheia sesiunea respectivă.
man grep