如何等待shell脚本启动的所有内容结束?

时间:2014-04-14 17:40:37

标签: linux bash shell

我正在使用嵌套的shell脚本。

我的问题与herehere提出的问题有点类似。但不完全一样。

我试图从这些解决方案中获得解决方案但不成功。

在我的 OuterMostShellScript.sh 中,我做了类似这样的事情:

some commands
./runThisScriptX.sh
other commands
end of script.

runThisScriptX.sh 包含使用&运算符在后台运行某些进程的循环。

我希望每个进程都由./runThisScriptX.sh命令启动,然后控件移动到上面代码中的other commands行。

如何实现这个目标?

编辑:我也是这样的:

some commands
./runThisScriptX.sh
wait
other commands
end of script.

但它不起作用。

4 个答案:

答案 0 :(得分:4)

两件事:

  • 源代码
  • 使用wait

您的脚本看起来不像:

some commands
. ./runThisScriptX.sh          # Note the leading . followed by space
wait                           # This would wait for the sourced script to finish
other commands
end of script

答案 1 :(得分:1)

使用wait内置命令:

wait

这将等待shell直接启动的所有后台进程在继续之前完成。

答案 2 :(得分:1)

使用内置的bash wait;来自man page -

  

等待每个指定的进程并返回其终止状态。每个n可以是a   进程ID或作业规范;如果给出了工作规范,该工作中的所有流程都是如此   管道等待。如果未给出n,则等待所有当前活动的子进程   for,返回状态为零。如果n指定不存在的进程或作业,则   返回状态为127.否则,返回状态是最后一个进程的退出状态   或工作等待。

或者,不要介绍任务。

答案 3 :(得分:1)

runThisScriptX.sh内,您应该在退出前等待并行子项完成:

child1 &
child2 &
child3 &
wait

然后在OuterMostShellScript.sh中,您在后台运行runThisScriptX.sh,并等待它。

some commands
./runThisScriptX.sh &
wait
other commands
end of script.

wait只能用于等待当前shell启动的进程。