Можно ли запустить две команды одновременно в сценарии оболочки?

10

Я знаю, что в командной строке я могу использовать &команду в фоновом режиме. Но мне интересно, смогу ли я сделать это в сценарии.

У меня есть такой скрипт:

date_stamp=$(date +"%Y-%m-%d" --date='yesterday')
shopt -s extglob

cd /my/working/directory/

sh ./stay/get_it_ios.sh
sh ./stay/get_it_mix.sh

cd stay
zip  ../stay_$date_stamp.zip  ./*201*

rm ./stay/!(*py|*sh)

И я хочу бежать sh ./stay/get_it_ios.shи sh ./stay/get_it_mix.shвместе, чтобы получить более точные данные. Возможно ли сделать это в рамках сценария оболочки?

Zen
источник

Ответы:

16

Да, это так. Если вы хотите сделать две вещи одновременно и дождаться их завершения, вы можете сделать что-то вроде:

sh ./stay/get_it_ios.sh &  PIDIOS=$!
sh ./stay/get_it_mix.sh &  PIDMIX=$!
wait $PIDIOS
wait $PIDMIX

Затем ваш сценарий запустит оба сценария параллельно и дождется завершения обоих сценариев, прежде чем продолжить.

DopeGhoti
источник
4
Вы можете просто запустить один waitбез аргумента, чтобы дождаться обоих процессов.
Стефан Шазелас
2
Если раньше в сценарии не было, вы бы создали третий процесс, который должен был пройти до более поздней стадии. Лучше утвердительно заявить, для чего ты wait, на мой взгляд.
DopeGhoti
Когда вы говорите, что оба сценария выполняются параллельно , вы имеете в виду, что они будут запускаться одновременно? Я имею в виду, предположим, что мы смогли зарегистрировать время с очень большой точностью (например, используя атомные часы). Оба должны начать вместе? Я спрашиваю, потому что сценарии читают построчно, верно?
Сигур
1
Как вы предполагаете, сценарии не начнут выполняться в одно и то же время вплоть до тактового цикла. Сценарии оболочки запускают команды в том порядке, в котором они даны, поэтому первая фоновая команда будет выполняться перед второй, если только (почти во всех случаях), очень незначительно. Когда я говорю, что они будут «работать параллельно», я имею в виду именно это: оба будут работать одновременно (при условии управления заданиями, обработки сигналов и / или приоритетов ядра).
DopeGhoti