似乎if
/ fi
之后的代码未运行。这是我所拥有的:
我有一个脚本,/ my / scripts / dir / directoryPercentFull.sh:
directoryPercentFull="$(df | grep '/aDir/anotherDir' | grep -o '...%' | sed 's/%//g' | sed 's/ //g')"
if [ $directoryPercentFull -gt 90 ]
then
echo $directoryPercentFull
exec /someDir/someOtherDir/test01.sh &
exec /someDir/someOtherOtherDir/test02.sh &
exec /someDir/yetAnotherDir/test03.sh
fi
echo "Processing Done"
被调用的脚本是: /someDir/someOtherDir/test01.sh
#!/usr/bin/env bash
echo "inside test01.sh"
sleep 5
echo "leaving test01.sh"
/someDir/someOtherOtherDir/test02.sh
#!/usr/bin/env bash
echo "inside test02.sh"
sleep 5
echo "leaving test02.sh"
/someDir/yetAnotherDir/test03.sh
#!/usr/bin/env bash
echo "inside test03.sh"
sleep 5
echo "leaving test03.sh"
通过cd- / my / scripts / dir来运行脚本,然后执行./directoryPercentFull.sh可以得到: 输出:
93
inside test03.sh
inside test02.sh
inside test01.sh
leaving test03.sh
leaving test01.sh
leaving test02.sh
预期输出:
93
inside test01.sh
inside test02.sh
inside test03.sh
leaving test01.sh
leaving test02.sh
leaving test03.sh
Processing Done
echo命令的顺序没什么大不了的,尽管如果有人知道为什么它们分别以3,2,1,然后3,1,2,我不会讨厌解释。
但是,我没有得到最后的Processing Done
。有人知道为什么echo
中最后的/my/scripts/dir/directoryPercentFull.sh
不会出现吗?我没有故意在最后一个&
语句之后放置exec
,因为我不希望if
/ fi
之后的所有内容都运行之前完成处理。
答案 0 :(得分:1)
/someDir/someOtherDir/test01.sh &
/someDir/someOtherOtherDir/test02.sh &
/someDir/yetAnotherDir/test03.sh
摆脱所有exec
。 exec
导致shell进程被给定命令替换,这意味着shell不再继续执行其他命令。
echo命令的顺序没什么大不了的,尽管如果有人知道为什么它们分别以3,2,1,然后3,1,2,我不会讨厌解释。
打印输出可以按任何顺序排列。这三个脚本是在并行进程中运行的,因此不会告诉他们echo
打印输出的顺序。