Подтвердить что ты не робот

Bash Script Вызывает другой Bash Script и ждет его завершения до того, как продолжить

У меня есть 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.

4b9b3361

Ответ 1

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

Ответ 2

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!

Ответ 3

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

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

Ответ 4

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