Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1092126
  • 博文数量: 186
  • 博客积分: 4939
  • 博客等级: 上校
  • 技术积分: 2075
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-08 17:15
文章分类

全部博文(186)

文章存档

2018年(1)

2017年(3)

2016年(11)

2015年(42)

2014年(21)

2013年(9)

2012年(18)

2011年(46)

2010年(35)

分类: 系统运维

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 while read -u3  ip   #或者while read ip <&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

阅读(1143) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~