如何像java线程一样并行运行shellscript

如何像java线程一样并行运行shellscript,shell,unix,sh,Shell,Unix,Sh,嗨,我有一个脚本mainscript.sh 在主脚本中,我有多个脚本 child1.sh child2.sh child3.sh rm -rf /home/bdata/batch/* 我正在运行mainscript.sh,它将并行运行所有子作业 mainscript.sh child1.sh & child2.sh & child3.sh & rm -rf /home/bdata/batch/* 第4条语句在完成所有执行之前运行 在并行完成上述3个脚

嗨,我有一个脚本mainscript.sh 在主脚本中,我有多个脚本

child1.sh  
child2.sh  
child3.sh 
rm -rf /home/bdata/batch/* 
我正在运行mainscript.sh,它将并行运行所有子作业

mainscript.sh

child1.sh &
child2.sh &
child3.sh &
rm -rf /home/bdata/batch/*   
第4条语句在完成所有执行之前运行

在并行完成上述3个脚本后,是否有任何方法可以控制最后一行的执行。

这是一种解决方案:

#!/bin/bash
./child1.sh &
./child2.sh & 
./child3.sh &
使用脚本的
/
或完整路径

如果命令被控制操作员
&
终止,则外壳 在子shell的后台执行命令。贝壳有 不等待命令完成,返回状态为0。如果要在退出脚本之前执行所有子脚本,请在末尾添加
wait
(如@Mark Setchell在下面所述)。

这是一种解决方案:

#!/bin/bash
./child1.sh &
./child2.sh & 
./child3.sh &
使用脚本的
/
或完整路径

如果命令被控制操作员
&
终止,则外壳 在子shell的后台执行命令。贝壳有
不等待命令完成,返回状态为0。如果要在退出脚本之前执行所有子脚本,请在末尾添加
wait
(正如@Mark Setchell在下面所写的)。

只需告诉shell等待,直到子脚本全部死亡:

child1.sh &
child2.sh &
child3.sh &
wait
rm -rf /home/bdata/batch/*  

只需告诉贝壳等到孩子们都死了:

child1.sh &
child2.sh &
child3.sh &
wait
rm -rf /home/bdata/batch/*  

在每个脚本的末尾添加(&D)。如果您想不考虑终端而运行,那么选择nohup选项。如果这是一个可接受的解决方案,Perl支持多线程和分叉。我知道它不是完全的shell,但几乎是无处不在的:@Kate--这是可行的,但问题是我想在所有其他shell脚本完成执行后运行最后一行。在我的情况下,它是在完成所有脚本之前删除我的文件夹在每个脚本的末尾添加(&D)。如果您想不考虑终端而运行,那么选择nohup选项。如果这是一个可接受的解决方案,Perl支持多线程和分叉。我知道它不完全是贝壳,但是几乎是无处不在的:@Kate--这是可行的,但问题是我想在所有其他shell脚本完成执行后运行最后一行。在我的情况下,它是在完成所有脚本之前删除我的文件夹添加
wait
,如果你想等到所有子脚本完成后再退出脚本。添加
wait
如果要等到所有子项完成后再退出脚本。