Î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

  • Vă rugăm, data viitoare, consultați mai întâi paginile de manual. În acest caz man grep

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ține Connection 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 care grep o filtrează și, de asemenea, pentru că:
  • grep "Connected to": selectați numai liniile care conțin Connected to. Acest lucru ar exclude, de asemenea, liniile care conțin Connection 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țin grep (astfel încât să fie linii care conțin atât Connected to, cât și grep și nu Connection refused!)
  • wc -l: numărați numărul de linii rezultate (deci liniile în ssh „stdout care conțin Connected to cu excepția celor care conțin și grep sau Connection 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 introduce exit . Dar, din nou, din moment ce utilizatorul nu va vedea nici o ieșire (deoarece totul merge la wc în cele din urmă), utilizatorul va avea foarte puține indicii că trebuie să introducă exit pentru a încheia sesiunea respectivă.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *