Сценарии оболочки, независимо от того, как они выполняются, выполняют одну команду за другой. Таким образом, ваш код выполнит results.sh
после завершения последней команды st_new.sh
.
Теперь есть специальная команда, которая испортит это: &
cmd &
означает: «Запустите новый фоновый процесс и выполните в нем cmd
. После запуска фонового процесса немедленно продолжите следующую команду в скрипте.»
Это означает, что &
не ждет cmd
сделать это. Я предполагаю, что st_new.sh
содержит такую команду. Если это так, вам нужно изменить скрипт:
cmd &
BACK_PID=$!
Это ставит идентификатор процесса (PID) нового фонового процесса в переменную BACK_PID
. Вы можете дождаться, когда это закончится:
while kill -0 $BACK_PID ; do
echo "Process is still active..."
sleep 1
# You can add a timeout here if you want
done
или, если вы не хотите особого обращения / вывода просто
wait $BACK_PID
Обратите внимание, что некоторые программы автоматически запускают когда вы запускаете их, даже если вы опустите &
. Проверьте документацию, у них часто есть возможность записать свой PID в файл или вы можете запустить их на переднем плане с помощью опции, а затем использовать команду &
оболочки, чтобы получить PID.