在生成线程后退出shell脚本

时间:2011-04-05 02:46:20

标签: multithreading shell unix

我有一个简单的脚本说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,因为它只是等待第一次调用永远退出。有什么建议。

由于

3 个答案:

答案 0 :(得分:4)

它确实立即退出。您的问题是,在输出打印到屏幕之前,脚本很快就会退出 。因此输出会覆盖你的提示,当你点击ctrl-c时它会重绘提示。

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

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

  • 首先:脚本退出
  • 第二:您的提示打印 - “user @ computer $”或其他。
  • 第三:ssh命令的所有输出都打印
  • 最后,你将光标留在一个空白行上,没有提示,这就是你认为它没有退出的原因。然后当你点击ctrl-c时,提示再次打印。

答案 1 :(得分:1)

我尝试了类似的东西并且脚本正确退出

#!/bin/bash

for i in 1 2 3 
do
    ssh id@box "ls -l" &
done

echo "i am done"

唯一的区别是我使用bash shell

答案 2 :(得分:1)

这应该有效。

我做过这样的工作,输出可能会变得混乱。你还等多久?你确定它没有真正完成。

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

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