Jeg prøver at forstå, hvad grep -v grep gør nedenfor:

ssh $server -p $port -o "ConnectTimeout 5" | grep -v "Connection refused" | grep "Connected to" | grep -v grep | wc -l 

Eller er der en bedre måde at finde TCP-forbindelsestest på?

Kommentarer

  • Se venligst næste gang mandssider først. I dette tilfælde man grep

Svar

Det udelukker alle linjer, der indeholder bogstavsekvensen grep fra den forrige rørudgang.

Svar

Hvis du vil kontrollere, at du kan oprette en ssh-forbindelse inden for 5 sekunder og køre en kommando, skal du bare gøre:

if ssh -o BatchMode=yes -o ConnectTimeout=5 -p "$port" "$server" true; then printf "%s\n" "$server is up" fi 

Din kommando giver ingen mening. Da du ikke giver en kommando til at køre på fjernserveren, kører ssh i rlogin -tilstand, hvor der anmodes om en pseudoterminal, og loginbrugeren til den eksterne bruger startes (eller muligvis en ForcedCommand).

Derefter anvender du flere filtre til output:

  • grep -v "Connection refused": filtrer enhver linje fra output der indeholder Connection refused. Det giver ikke mening, da den fejlmeddelelse, hvis den så ud, ville blive skrevet på stderr, ikke standardoutputtet, som grep filtrerer, og også fordi:
  • grep "Connected to": vælg kun de linjer, der indeholder Connected to. Det udelukker også de linjer, der indeholder Connection refused, da det er usandsynligt, at en linje indeholder begge dele.
  • grep -v grep fjern også linjerne, der indeholder grep (så det ville være linjer, der indeholder både Connected to og grep og ikke Connection refused!)
  • wc -l: tæl antallet af resulterende linjer (så linjerne i ssh “s stdout, der indeholder Connected to undtagen dem, der også indeholder grep eller Connection refused). Bemærk, at wc kun udsender dette nummer, når forbindelsen er lukket, når shell-sessionen er afsluttet, som når brugeren indtaster exit . Men så igen, da brugeren ikke vil se nogen output (da det hele går til wc til sidst), vil brugeren have lidt anelse om, at han skal indtaste exit for at afslutte sessionen.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *