Символ &
запускает фоновый процесс. Фоновый процесс выполняется асинхронно в подоболочке. Переменные можно передавать из родительской оболочки в подчиненную оболочку, а не наоборот. Однако вы можете найти обходной путь, если вам действительно нужно значение, установленное в дочерней оболочке:
boolean=$(mktemp) && echo "false" >$boolean
{ sleep 5 && echo true >$boolean && echo "boolean is true now" ; } &
{ until [ "$(cat $boolean)" = "true" ] ; do sleep 1 && cat $boolean ; done ; } &&
echo "boolean is true now: $(cat $boolean)"
Это создает временный файл, содержимое которого является логическим значением. В цикле до
этот файл проверяется до тех пор, пока он не станет истинным.
Примечание:
Я рекомендую сделать следующее в вашем скрипте (если возможно):
{ sleep 5 && echo "background process done" ; } &
wait
echo "continue in foregound."
wait
ожидает завершения фонового процесса.