Ответ 1
Обычно это происходит; что-то еще происходит. Вы уверены, что другой script не работает что-то в фоновом режиме? Вы можете попробовать использовать wait
независимо.
У меня есть 1 bash script, который запускает другой bash script, однако первый 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.
Обычно это происходит; что-то еще происходит. Вы уверены, что другой script не работает что-то в фоновом режиме? Вы можете попробовать использовать wait
независимо.
AS Я использую схему, как это, в нескольких сценариях - просто вызывает второй скрипт в той же оболочке, используя source
.
В script-1
:
source script2.sh
или
. script2.sh
Итак - ни одна команда в script-1
не будет продолжаться до тех пор, пока script2.sh
не закончит все задачи.
Маленький пример.
Первый script:
$ cat script-1.sh
#!/bin/bash
echo "I'm sccript $0."
echo "Runnig script-2..."
source script-2.sh
echo "script-2.sh finished!"
Второй script:
$ 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!
Вы можете просто добавить команду wait
после выполнения второй script, она будет ожидать весь процесс, который вы запускаете из основного script
Вы даже можете восстановить PID второго script с помощью команды echo $!
непосредственно после вызова второго script, а затем передать этот PID в качестве аргумента в команду wait
попробуйте использовать bash second.sh
и проверьте свой second.sh и убедитесь, что у вас нет программ, выполняющихся в фоновом режиме