Sto cercando di capire cosa fa grep -v grep di seguito:

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

O esiste un modo migliore per trovare il test di connessione TCP?

Commenti

  • La prossima volta consulta prima le pagine man. In questo caso man grep

Answer

Esclude tutte le righe contenenti la sequenza di lettere grep dalloutput della pipe precedente.

Risposta

Se vuoi verificare di poter stabilire una connessione ssh entro 5 secondi ed eseguire un comando, esegui semplicemente:

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

Il tuo comando così comè non ha molto senso. Poiché non fornisci un comando da eseguire sul server remoto, ssh verrà eseguito nel rlogin modalità, dove viene richiesto uno pseudo-terminale e viene avviata la shell di login dellutente remoto (o forse un ForcedCommand).

Quindi, stai applicando diversi filtri alloutput:

  • grep -v "Connection refused": filtra qualsiasi riga da l output che contiene Connection refused. Non ha molto senso in quanto il messaggio di errore se apparisse sarebbe scritto su stderr, non sulloutput standard che grep sta filtrando, e anche perché:
  • grep "Connected to": seleziona solo le righe che contengono Connected to. Ciò escluderebbe anche le righe che contengono Connection refused poiché è improbabile che una riga contenga entrambi.
  • grep -v grep, rimuovi anche le righe che contengono grep (in modo che siano righe che contengono sia Connected to e grep e non Connection refused!)
  • wc -l: conta il numero di righe risultanti (quindi le righe in ssh “s stdout che contengono Connected to tranne quelli che contengono anche grep o Connection refused). Tieni presente che wc restituirà quel numero solo quando la connessione viene chiusa, quando la sessione della shell è stata terminata, come quando lutente entra in exit . Ma poi di nuovo, poiché lutente “non vedrà alcun output (dato che alla fine va tutto a wc), lutente avrà pochi indizi sul fatto che debba inserire exit per terminare la sessione.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *