我在while循环中使用ssh,但ssh完第一行后就退出了,使用了exec, & 等命令均不行,后来看到这篇文章的解释,才明白。
转载来自:http://blog.csdn.net/shrekmu/archive/2008/06/05/2513177.aspx,以示提醒备份。
转载如下:
最近在写一个自动更新的shell,可是发现如果在使用while循环从一个文件中读取ip地址,然后访问就只能读取第一行纪录。代码如下:
while read LINE
do
echo *******************************************$LINE
ssh 192.168.10.233 ls
done < data
但是如果使用for就没有这个问题,非常的奇怪,for的代码如下:
for LINE in `cat data`
do
echo *******************************************$LINE
ssh 192.168.10.233 ls
done
难道for和while竟然有这么大的差别,不可能吧。经过一番试验以后发现,原来并不是while的for的差别,而是while中使用重定向机制,data文件中的信息都已经读入并重定向给了整个while语句。所以当我们在while循环中再一次调用read语句,就会读取到下一条记录。问题就出在这里,ssh语句正好回读取输入中的所有东西,下面这个shell能很好的说明这个问题:
while read LINE
do
echo *******************************************$LINE
ssh 192.168.10.233 cat
done < data
执行这个shell就会发现,ssh中的cat语句会打印出data文件中的其他纪录,这就导致调用玩ssh语句后,输入缓存中已经都被读完了,当read语句再读的时候当然也就读不到纪录,循环也就退出了。改进方法是,将ssh的输入重定向输入:
while read LINE
do
echo *******************************************$LINE
ssh 192.168.10.233 ls < /dev/null
done < data
这样,在while语句中也能顺利的执行ssh语句了。linux的重定向还真复杂。
分享到:
相关推荐
While循环和for循环在C语言里面经常使用,需要讲的地方不多,可以一句话带过。加上while循环和for循环是可以相互完全替代的,所以这里主要讲一下while循环()括号里面可能是何种实现方法,从API的角度来看待while...
C语言实现求1+2+3+……+100的和,要求分别用while、do while、for循环实现。.txt
在自动化测试过程中,使用For循环来对某个动作进行重复操作是很普遍的行为。在Robot Framework 中,各种测试库中均提供了多种方式的For循环结构,在其中覆盖了大部分类型的循环类型。而Robot Framework自身也包含了...
如下所示: a = [1, 2, 3, 8, 9] ...以上这篇在Python中,不用while和for循环遍历列表的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持软件开发网。 您可能感兴趣的文章:pytho
for、while、do-while循环的使用。包括循环结构的4个要素,一级介绍do-while循环结构
While和for循环 读写文件 三种读操作比较 read()读文件 readline()读文件 readlines()读文件 While和for循环 for循环实现猜三次年纪 age = 66 count = 0 for i in range(3): guess_age = int(input('age:')) if ...
通过while循环,实时计算跑步剩余时间、当前的跑步距离和消耗的卡路里 while循环 while循环基本语法 while 真值表达式: 语句块1 else: 语句块2 先执行真值表达式,判断True/False 如果为True则执行语句块1,然后跳转...
[第2讲]ST语言基本操作(For循环与While循环)-其他语言编程flv,[第2讲]ST语言基本操作(For循环与While循环)-其他语言编程。查看更多
基于LabVIEW的小程序求阶乘 偶数和 for while循环
for循环,while循环等一些循环嵌套以及其使用场景和特点比较
while循环九九乘法表、do.while循环九九乘法表、for循环_九九乘法表
用labview在While循环中实现累加的两种方法
这是一个99乘法表,希望初学c语言的童鞋都能学有所成!
(2)apply函数族和泛型函数map能够更加高效简洁地实现一般的for循环、while循环,但这不代表for循环、while循环就没用了,它们可以在更高的层次使用(相对于在逐元素级别使用) 1. 基本for循环 例如,有如下的...
本文档继续探讨了如何使用MATLAB的for循环嵌套和while循环语句来实现更复杂的应用。我们提供了详细的源代码解析,包括使用for循环嵌套和while循环输出九九乘法表的过程。此外,还给出了使用示例和调用函数的说明。...
LabVIEW在使用时,我们区分while循环和for循环的时候有个唯一也很特殊的区别,那就是for可以执行0次,但是while至少执行一次
1.学会使用while、do-while、for语句2.熟练掌握循环结构程序设计方法3.掌握选择结构与循环结构的嵌套
本资源内部包含了while循环的练习代码,以及我之前发的所有的练习代码
for循环和while循环for循环for循环基本概念for循环的例子while循环while循环的概念while循环的例子 for循环 for循环基本概念 for循环可以从一个有序集合里依次把元素拿出来并且赋值给name,比如list,tuple和字符串...
C语言while、do-while、for循环 课程5