我有一个名为alarm.sh
的简单测试脚本。它看起来像:
#!/bin/bash
cust_func(){
sleep 10
echo "Sleep $1 times..."
}
for i in {1,2,3,4,5}
do
cust_func $i &
done
echo "script end"
如果我使用./alarm.sh
运行脚本,它将以并行方式按预期运行并生成如下结果:
Sleep 2 times...
Sleep 3 times...
Sleep 1 times...
Sleep 4 times...
Sleep 5 times...
script end
但是我需要通过apache ant运行脚本,看起来脚本已经运行但是部分结果丢失了。 apache ant目标:
<target name="TodAlarmsDryRun" depends="build">
<exec executable="/bin/bash" failonerror="true">
<arg value="${output.dir}/bin/alarm.sh" />
</exec>
</target>
使用apache ant生成的结果:
script end
你可以看到所有的睡眠信息都在误导。
我怀疑蚂蚁没有正确使用bash脚本。特别是shell脚本具有并行功能。因为如果我删除并行关键字&
,它可以显示结果。但它没有以并行方式运行。有没有人对此有任何想法?
答案 0 :(得分:0)
您正在从当前shell分离cust_func的执行,因此它在不同的shell中执行,这就是输出丢失的原因。 您可以将输出重定向到文件,在脚本完成后读取。
cust_func $i >> cust_func.log &