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


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вместе, чтобы получить более точные данные. Возможно ли сделать это в рамках сценария оболочки?

Ответы:


16

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

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

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


4
Вы можете просто запустить один waitбез аргумента, чтобы дождаться обоих процессов.
— Стефан Шазелас

2
Если раньше в сценарии не было, вы бы создали третий процесс, который должен был пройти до более поздней стадии. Лучше утвердительно заявить, для чего ты wait, на мой взгляд.
— DopeGhoti

Когда вы говорите, что оба сценария выполняются параллельно , вы имеете в виду, что они будут запускаться одновременно? Я имею в виду, предположим, что мы смогли зарегистрировать время с очень большой точностью (например, используя атомные часы). Оба должны начать вместе? Я спрашиваю, потому что сценарии читают построчно, верно?
— Сигур

1
Как вы предполагаете, сценарии не начнут выполняться в одно и то же время вплоть до тактового цикла. Сценарии оболочки запускают команды в том порядке, в котором они даны, поэтому первая фоновая команда будет выполняться перед второй, если только (почти во всех случаях), очень незначительно. Когда я говорю, что они будут «работать параллельно», я имею в виду именно это: оба будут работать одновременно (при условии управления заданиями, обработки сигналов и / или приоритетов ядра).
— DopeGhoti
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.