При использовании exec с & последняя команда не запускается - PullRequest
1 голос
/ 12 апреля 2019

Кажется, код после 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"

Выполнение скрипта, перейдя в / 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

Порядок команд эха не так уж и важен, хотя, если кто-то знает, почему они идут 3,2,1, а затем 3,1,2, я не буду ненавидеть объяснение.

Однако я не получаю этот окончательный Processing Done. У кого-нибудь есть хоть какая-то подсказка, почему финальный echo обратно в /my/scripts/dir/directoryPercentFull.sh не происходит? Я намеренно не поместил & после последнего оператора exec, так как не хочу, чтобы то, что было после if / fi, запускалось до тех пор, пока вся его обработка не будет завершена.

1 Ответ

1 голос
/ 12 апреля 2019
/someDir/someOtherDir/test01.sh &
/someDir/someOtherOtherDir/test02.sh &
/someDir/yetAnotherDir/test03.sh

Избавьтесь от всех exec с. exec вызывает замену процесса оболочки на данную команду с помощью данной команды, что означает, что оболочка не продолжает выполнять дальнейшие команды.

Порядок команд эха не так уж и важен, хотя, если кто-то знает, почему они идут 3,2,1, а затем 3,1,2, я не возражаю против объяснения.

Распечатки могут быть в любом порядке. Три сценария выполняются в параллельных процессах, поэтому невозможно сказать, в каком порядке они echo распечатывают.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...