Por que o resultado deste e de while é diferente? [duplicado]

1

Eu tenho um loop for:

for host in $(cat ./hosts)
do
   echo -e "$host"
   ssh -o "StrictHostKeyChecking no" $host "uptime" 2>/dev/null
   echo -e "\n"
done

e um loop while que é suposto para o mesmo trabalho que o loop acima:

while read host
do
   echo -e "$host"
   ssh -o "StrictHostKeyChecking no" $host "uptime" 2>/dev/null
   echo -e "\n"
done <./hosts

hosts é um arquivo localizado no mesmo local que os scripts contendo e while loop e contém algum nome de host de servidores remotos. O loop for imprime o resultado esperado (para todos os hosts listados no arquivo hosts), mas no caso do loop while, ele apenas imprime o uptime do primeiro host e sai!

o arquivo hosts contém um nome de host por linha.

A questão é por que o comportamento desses dois loops é diferente?

    
por coffeMug 27.10.2014 / 11:59

1 resposta

2

O problema é que o ssh lê a entrada padrão e, portanto, come todas as linhas restantes. Você pode simplesmente conectar sua entrada padrão a lugar nenhum:

$ ssh -o "StrictHostKeyChecking no" $host "uptime" 2>/dev/null < /dev/null

Referências

por 27.10.2014 / 12:26

Tags