分类: 系统运维
2014-05-02 16:18:25
问题如下,要批量远程关机,
# host
192.168.1.2
192.168.1.3
192.168.1.4
# cat shutdown.sh
#!/bin/sh
while read ip
do
ssh "init 0"
ssh "echo 0"
echo "$host shutdown ok!"
done
预先做了ssh信任,while循环还没有完,脚本就退出。为什么?
read和ssh共用一个FD,while循环部分是针对整个循环部分的,read和ssh同时从FD0(标准输入)读取,结果ssh那部分把host给读完了,解决办法:
-------------------------------------------------
exec 3
do
....
done
exec 3<&- #恢复默认,从FD0标准输入读取信息,默认有9个FD,0/1/2都是比较常用的,比如2>&1之流,不做解释了。
或者ssh 的时候加上参数-n, -n Redirects stdin from /dev/null (actually, prevents reading from stdin). 关闭ssh从stdin读取信息即可。
当然把ssh换成echo 之类的就没这类问题了,为什么呢?因为echo这种不是从stdin读取信息的。
P.S ,要强制read从终端tty读取信息 read VAR