Isso não é possível com a sua função atual, assim que você faz o background com &
, é necessária uma cópia da pilha e das folhas do processo. Não há como as alterações em sua pilha se propagarem para a cópia da tarefa, a menos que você crie explicitamente essa funcionalidade, e é igualmente impossível obter alterações na pilha da função em sua pilha atual.
Você poderia configurar alguma comunicação entre processos para alterar a variável, mas isso é sempre complicado para acertar, e não sei qual é o seu caso de uso. Exemplo de IPC nos dois sentidos:
mkfifo -m 600 /var/tmp/cfn-to-fn
mkfifo -m 600 /var/tmp/cfn-from-fn
export CFN = ''
_some_fn
{
read CFN < /var/tmp/cfn-to-fn
# do something with the new CFN here
echo 'processed data' >/var/tmp/cfn-from-fn
_some_fn &
}
_some_fn &
echo 'processme' > /var/tmp/cfn-to-fn
cat /var/tmp/cfn-from-fn
Existem muitas alternativas para o mkfifo, geralmente todas sob o rótulo de comunicação entre processos . Se você encontrar a virtude em manter as coisas simples, não se preocupe com isso e apenas escreva seus dados em um arquivo em uma extremidade e leia-os na outra. O D-Bus é o grande barramento IPC na maioria dos sistemas unix, junto com TCP / ou UDP / IP (com netcat
ou nc
), mas eu não vi muitos scripts de shell que os usam.
Sua alternativa final é deixar tudo isso como está e fazer com que seu script funcione sem executá-lo como uma tarefa em segundo plano, para que você possa ajustar o ambiente enquanto ele é executado.