为什么这个 for 和 while 循环的结果不同?

为什么这个 for 和 while 循环的结果不同?

我有一个 for 循环:

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

和一个 while 循环,它的作用与上面的 for 循环完全相同:

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

Hosts 是一个与包含 for 和 while 循环的脚本位于同一位置的文件,它包含远程服务器的一些主机名。 for 循环打印预期结果(对于主机文件中列出的所有主机),但在 while 循环的情况下,它仅打印第一个主机uptime并退出!

主机文件每行包含一个主机名。

问题是为什么这两个循环的行为不同?

答案1

问题是 ssh 从标准输入读取,因此它会吃掉所有剩余的行。您可以将其标准输入连接到任何地方:

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

参考

相关内容