Paralelo GNU - variáveis globais e função

4

Eu tenho este script:

GLOBAL_VAR="some global value"

function test
{
  echo $1
  echo ${GLOBAL_VAR}
}

export -f test  
parallel --jobs 5 --linebuffer test ::: "${files[@]}"

Como posso ter $GLOBAL_VAR visível em paralelo?

    
por Martin Perry 23.06.2017 / 15:59

2 respostas

6

As variáveis do shell não são visíveis para os processos filhos, a menos que sejam exportados, portanto, será necessário dizer

export GLOBAL_VAR

em algum lugar antes que o processo filho seja iniciado; em conchas modernas, a exportação pode ser combinada com a tarefa

export GLOBAL_VAR="some global value"
    
por 23.06.2017 / 17:54
0

" Variáveis do shell não são visíveis para processos-filhos a menos que sejam exportados " - e mesmo assim eles ainda não são visíveis se você executar um comando remotamente. Isto é, a menos que você use env_parallel , que é uma interface para o GNU Parallel que copia o ambiente:

   . 'which env_parallel.bash'

   aliases
             alias myecho='echo aliases'
             env_parallel myecho ::: work
             env_parallel -S server myecho ::: work
             env_parallel --env myecho myecho ::: work
             env_parallel --env myecho -S server myecho ::: work

   functions
             myfunc() { echo functions $*; }
             env_parallel myfunc ::: work
             env_parallel -S server myfunc ::: work
             env_parallel --env myfunc myfunc ::: work
             env_parallel --env myfunc -S server myfunc ::: work

   variables
             myvar=variables
             env_parallel echo '$myvar' ::: work
             env_parallel -S server echo '$myvar' ::: work
             env_parallel --env myvar echo '$myvar' ::: work
             env_parallel --env myvar -S server echo '$myvar' ::: work

   arrays
             myarray=(arrays work, too)
             env_parallel -k echo '${myarray[{}]}' ::: 0 1 2
             env_parallel -k -S server echo '${myarray[{}]}' ::: 0 1 2
             env_parallel -k --env myarray echo '${myarray[{}]}' ::: 0 1 2
             env_parallel -k --env myarray -S server echo '${myarray[{}]}' ::: 0 1 2
    
por 24.06.2017 / 06:52