Execute dois comandos dependentes em segundo plano

0

Eu preciso executar dois comandos em segundo plano

function "$arg1" "$agr2" arg3 && declare "workspaces=$arg3"

primeiro executará a função se estiver completa, então inicializará arg3 no espaço de trabalho (é global var) e todo o processo deverá ser executado em segundo plano

Eu tentei

function "$arg1" "$agr2" arg3 && declare "workspaces=$arg3" & //this didn't work
(function "$arg1" "$agr2" arg3 && declare "workspaces=$arg3") & //niether this

Eu não quero executar ambos em paralelo, porque neste caso o espaço de trabalho não será inicializado

    
por Sudhir Tiwari 15.10.2018 / 11:05

2 respostas

0

Eu acredito que o problema que você está enfrentando é que você está esperando que a variável global $workspaces seja definida como resultado dessa função. No entanto, você não pode definir uma variável global (em termos de shell, export ) no shell atual de uma subshell. E a única maneira de executar um comando em segundo plano é executá-lo em uma subcamada. Portanto, executar declare ou export como parte de um comando de segundo plano não definirá essa variável no shell atual, o que parece ser o que você está tentando alcançar.

    
por 15.10.2018 / 18:19
0

Não está claro para mim o que você está tentando fazer.

Meu palpite é que você pode usar parset do GNU Parallel como parte da solução:

# Activate parset
. 'which env_parallel.bash'

export -f myfunction
parset myresult -j0 myfunction {} ::: arg1 arg2 arg3
echo "${myresult[0]}"
echo "${myresult[1]}"
echo "${myresult[2]}"

Isso executará esses comandos em paralelo:

myfunction arg1
myfunction arg2
myfunction arg3

e coloque a saída de cada um deles no array myresult .

    
por 16.10.2018 / 11:38