Bash Script Вызывает другой bash-скрипт и ждет его завершения, прежде чем продолжить - PullRequest
25 голосов
/ 16 февраля 2010

У меня есть 1 сценарий bash, который выполняет другой сценарий bash, однако первый сценарий bashscript не ожидает завершения второго, прежде чем продолжить, как я могу заставить его ждать?

Например:

#!/bin/bash
# first.sh

#call to secondary script
sh second.sh
echo "second.sh has completed"

echo "continuing with the rest of first.sh..."

Как сейчас, он запустит second.sh и продолжит работу, не дожидаясь завершения second.sh.

Ответы [ 4 ]

18 голосов
/ 20 ноября 2013

КАК я использую схему, подобную этой, в нескольких сценариях - просто вызываю вторые сценарии в одной и той же оболочке-копии, используя source.

В script-1:

source script2.sh

или

. script2.sh

Итак, ни одна команда в script-1 не будет выполнена, пока script2.sh не завершит все свои задачи.

Маленький пример.

Первый скрипт:

$ cat script-1.sh
#!/bin/bash
echo "I'm sccript $0."
echo "Runnig script-2..."

source script-2.sh

echo "script-2.sh finished!"

Второй скрипт:

$ cat script-2.sh
#bin/bash
echo "I'm script-2. Running wait operation..."
sleep 2
echo "I'm ended my task."

Как это работает:

$ ./script-1.sh
I'm sccript ./script-1.sh.
Runnig script-2...
I'm script-2. Running wait operation...
I'm ended my task.
script-2.sh finished!
14 голосов
/ 16 февраля 2010

Обычно это так; что-то еще происходит. Вы уверены, что другой сценарий не работает в фоновом режиме? Вы можете попробовать использовать wait независимо.

7 голосов
/ 19 февраля 2010

Вы можете просто добавить команду wait после выполнения второго сценария, она будет ожидать всех процессов, которые вы запускаете из основного сценария

Вы можете даже восстановить PID вашего второго сценария, используя команду echo $! непосредственно после вызова второго сценария, а затем передать этот PID в качестве аргумента команде wait

1 голос
/ 16 февраля 2010

попробуйте использовать bash second.sh и проверьте файл second.sh и убедитесь, что у вас нет программ, работающих в фоновом режиме

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