LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 581|回复: 7

我发现一个奇怪的问题使while中止

[复制链接]
发表于 2004-6-23 11:02:49 | 显示全部楼层 |阅读模式
/tmp/a如下
1985
5428
4587


  1.          while read  processID
  2.          do
  3.            ssh $target_machine "kill -9  $processID"
  4.            echo $processID
  5.          done < /tmp/a
复制代码

上面的代码只显示1985

如果在ssh那一行加上&,则循环不会中止

  1.          while read  processID
  2.          do
  3.            ssh $target_machine "kill -9  $processID" [color=red]&[/color]
  4.            echo $processID
  5.          done < /tmp/a
复制代码


请高人解释下
发表于 2004-6-23 12:52:21 | 显示全部楼层
刚试了一下,果然如此,怀疑跟 ssh 有关
发表于 2004-6-23 17:52:06 | 显示全部楼层
请你把结果贴出来。
在程序执行完毕后,是否在第一次循环中被阻塞了?
发表于 2004-6-23 18:01:28 | 显示全部楼层
第一种情况:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2004-6-23 18:05:33 | 显示全部楼层
第二种情况:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2004-6-23 20:06:31 | 显示全部楼层

回复: 我发现一个奇怪的问题使while中止

最初由 scopio 发表
/tmp/a如下
1985
5428
4587


  1.          while read  processID
  2.          do
  3.            ssh $target_machine "kill -9  $processID"
  4.            echo $processID
  5.          done < /tmp/a
复制代码

上面的代码只显示1985

如果在ssh那一行加上&,则循环不会中止

  1.          while read  processID
  2.          do
  3.            ssh $target_machine "kill -9  $processID" [color=red]&[/color]
  4.            echo $processID
  5.          done < /tmp/a
复制代码


请高人解释下

因为加了&,把前台终端施放了出来,所以循环会继续!
 楼主| 发表于 2004-6-23 21:06:50 | 显示全部楼层
不加&的话,为何不等ssh执行完毕后继续,而是中止呢?
发表于 2004-6-23 22:28:24 | 显示全部楼层
还是像教主所言,贴出这个while的输出信息吧,
因为while read结构是逐行处理读入的,当ssh一个ip的时候,
如果出现阻塞,那么ssh就等待用户来处理,这样的话,循环当然
就无法继续了,而加上&讷?!,实际上己是把上述的出现的需要用户
交互的信息放在后台,而前台依旧会逐行的读取下一个$processID
这样看起来,循环没有被中止!
用-x选项调试一下此脚本,看看出现了什么错误?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表