2011-04-05 143 views
0

我有一个简单的脚本后说test.sh是这样的:退出产卵线程

#!/bin/sh 

for i in 0 1 2 3 4 5 
do 
ssh BOX someCommand& 
done 
exit 0 

当我运行该脚本,它产生6个过程和结果输出在屏幕上,但经过它的完成只是在那里等待。我需要做ctrl + c出来。问题是我不能在其他脚本中多次调用test.sh,因为它只是等待第一个调用永远退出。有什么建议么。

感谢

+1

按照您的术语进行定制;使用'&'创建的后台进程不是线程。 – 2011-04-05 03:15:25

+0

thnx我改变了它 – codeObserver 2011-06-03 04:50:54

回答

4

它实际上不会立即退出。你的问题是,在输出被打印到屏幕之前,脚本很快也会退出。所以输出会覆盖你的提示,当你点击ctrl-c时,它会重新画出提示。

尝试在退出前添加“wait”命令 - 那么在所有ssh进程完成之前脚本不会退出。

通过 “输出将覆盖提示” 我的意思是:

  • 第一:脚本退出
  • 二:你的提示打印 - “用户名@计算机$” 或什么的。
  • 第三:所有输出的ssh命令都打印出来
  • 最后你将光标放在一个没有提示的空行上,这就是你认为它没有退出的原因。然后当你按下ctrl-c时,提示再次打印。
+0

thnx为答案。这工作。你能澄清一下“输出会覆盖你的提示符,”它假设在提示符上输出输出。为什么会覆盖它?我想出于同样的原因,我没有完全理解等待如何解决问题。 – codeObserver 2011-06-03 04:54:54

1

我想类似的东西和脚本退出正常

#!/bin/bash 

for i in 1 2 3 
do 
    ssh [email protected] "ls -l" & 
done 

echo "i am done" 

唯一的区别是我使用bash shell的

1

这应该有效。

我已经完成了这样的工作,输出结果可能相当混乱。你还等多久?你确定它没有做到吗?

在退出0之前添加banner done,然后您将确定它确实被挂起。

另一种可能性是,有关someCommand的事情还没有真正完成。如果它是您控制的脚本,请添加一个echo "someCommand on ${HOST} is finished"以确保每个脚本都完成。