Estou tentando entender o que grep -v grep faz abaixo:

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

Ou existe uma maneira melhor de encontrar o teste de conexão TCP?

Comentários

  • Da próxima vez, consulte primeiro as páginas do manual. Neste caso, man grep

Resposta

Exclui todas as linhas que contêm a sequência de letras grep da saída do pipe anterior.

Resposta

Se você deseja verificar se pode estabelecer uma conexão ssh em 5 segundos e executar um comando, basta fazer:

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

Seu comando como está faz pouco sentido. Como você não fornece um comando para ser executado no servidor remoto, ssh será executado no rlogin modo, onde um pseudoterminal é solicitado e o shell de login do usuário remoto é iniciado (ou possivelmente um ForcedCommand).

Então, você está aplicando vários filtros à saída:

  • grep -v "Connection refused": filtre qualquer linha de a saída que contém Connection refused. Isso faz pouco sentido, já que a mensagem de erro se aparecesse seria escrita em stderr, não na saída padrão que grep está filtrando e também porque:
  • grep "Connected to": selecione apenas as linhas que contêm Connected to. Isso também excluiria as linhas que contêm Connection refused, pois é “improvável que uma linha contenha os dois.
  • grep -v grep, remova também as linhas que contêm grep (para que sejam linhas que contenham Connected to e grep e não Connection refused!)
  • wc -l: conte o número de linhas resultantes (portanto, as linhas em ssh “s stdout que contém Connected to exceto aqueles que também contêm grep ou Connection refused). Observe que wc só exibirá esse número quando a conexão for fechada, quando a sessão do shell for encerrada, como quando o usuário entra em exit . Mas, novamente, uma vez que o usuário “não verá nenhuma saída (já que tudo vai para wc eventualmente), o usuário terá poucas pistas de que precisa inserir exit para encerrar essa sessão.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *