4 votos

GNU Parallel - variables globales y la función

Tengo este script:

GLOBAL_VAR="some global value"

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

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

¿Cómo puedo tener $GLOBAL_VAR visible desde el paralelo?

6voto

thrig Puntos 221

Las variables de Shell no son visibles para los procesos secundarios a menos que se exporten así que tendrás que decir

export GLOBAL_VAR

en algún lugar antes de que el niño lanzamiento del proceso; en los modernos proyectiles de la exportación puede ser combinado con la asignación de

export GLOBAL_VAR="some global value"

0voto

Ole Tange Puntos 1305

"Las variables de Shell no son visibles para los procesos secundarios, a menos que se exportan" - y aún así todavía no son visibles si se ejecuta un comando de forma remota. Eso es a menos que usted use env_parallel que es un frontend para GNU Paralelo que copias el medio 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

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: