Shell脚本虽然只循环一次

时间:2015-02-03 02:03:24

标签: linux bash shell

我想用ssh获取所有服务器的时间,但我的脚本只循环一次然后退出,原因是什么?

servers.txt

192.168.1.123
192.168.1.124
192.168.1.125
192.168.1.126

gettime.sh

#!/bin/bash
while read host
do
    ssh root@${host} date

done < "servers.txt"

输出

Tue Feb  3 09:56:54 CST 2015

1 个答案:

答案 0 :(得分:4)

这是因为ssh开始读取您想要循环的输入。您可以添加< /dev/null来阻止它:

#!/bin/bash
while read host
do
    ssh root@${host} date < /dev/null
done < "servers.txt"

ffmpegmplayer也会发生同样的事情,可以用同样的方法解决。


PS:shellcheck自动捕获此问题及其他问题:

In yourscript line 4:
    ssh root@${host} date
    ^-- SC2095: Add < /dev/null to prevent ssh from swallowing stdin.