O caractere &
faz um processo em segundo plano. Um processo em segundo plano é executado de forma assíncrona em um subshell. As variáveis podem ser passadas de um shell pai para um sub shell, e não o contrário. No entanto, você pode fazer uma solução alternativa se realmente precisar do valor definido no shell filho:
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)"
Isso cria um arquivo temporário cujo conteúdo é o valor booleano. No loop until
, esse arquivo é verificado até conter true.
Aviso:
Eu recomendo fazer o seguinte no seu script (se possível):
{ sleep 5 && echo "background process done" ; } &
wait
echo "continue in foregound."
wait
espera que o processo em segundo plano termine.