Você tem:
egrep... | while read ...; do
...
... ssh $IP exit...
...
done
ssh
conecta-se ao host remoto e executa o comando remoto e envia o que lê de seu stdin (a menos que tenha passado a opção -n
)
Nesse caso, o stdin de ssh
é o canal de egrep
, o mesmo canal read
está lendo.
Portanto, ele normalmente lerá toda a saída de egrep
e a enviará para o comando exit
em $IP
(o shell remoto ou exit
não o lê, mas ssh
terá lido isso.
nc
é outro comando que lê seu stdin para enviar a conexão que ele estabelece, mas não quando passou a opção -z
como você faz aqui.
Para evitar o problema, use a opção -n
para ssh
ou redirecione o status de ssh
de /dev/null
( ssh < /dev/null...
).