Nov 6

shell下while使用ssh的问题 不指定

djangowang , 16:28 , 工作相关 » Shell , 评论(0) , 引用(0) , 阅读(222) , Via 本站原创 | |
今天在一些机器上批量执行命令,将10多个ip追加到指定文件中(ip)通过以下shell方式来批量执行。


#!/bin/bash
while read line
do
         ssh $line "command"
done < ip


奇怪的是每次执行1行就退出。 网上google以下原因,while read 会从标准输入读取1行数据赋值给line变量,在while中循环嵌套ssh,ssh命令就会截取所有标准输入的数据这就导致read再次读数据时数据已经被ssh读取,line变量获取为空值最终导致循环结束。

解决方式:
1. ssh -n ,其中-n参数含义如下:
-n 把 stdin 重定向到 /dev/null (实际上防止从 stdin 读取数据). 在后台运行时一定会用到这个选项. 它的常用技巧是远程运行 X11 程序. 例如, ssh -n shadows.cs.hut.fi emacs 将会在 shadows.cs.hut.fi 上启动 emacs, 同时自动在加密通道中转发 X11 连接. 在后台运行. (但是如果 要求口令或密语, 这种方式就无法工作; 参见 -f 选项.)

2. ssh "command" < /dev/null
3. 或者循环时使用for
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]