与&一起使用exec时,最终命令不会运行

时间:2019-04-11 22:15:16

标签: bash unix

似乎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之后的所有内容都运行之前完成处理。

1 个答案:

答案 0 :(得分:1)

/someDir/someOtherDir/test01.sh &
/someDir/someOtherOtherDir/test02.sh &
/someDir/yetAnotherDir/test03.sh

摆脱所有execexec导致shell进程被给定命令替换,这意味着shell不再继续执行其他命令。

  

echo命令的顺序没什么大不了的,尽管如果有人知道为什么它们分别以3,2,1,然后3,1,2,我不会讨厌解释。

打印输出可以按任何顺序排列。这三个脚本是在并行进程中运行的,因此不会告诉他们echo打印输出的顺序。