GNU Parallel - глобальные переменные и функции

673
Martin Perry

У меня есть этот скрипт:

GLOBAL_VAR="some global value"  function test { echo $1 echo $ }  export -f test  parallel --jobs 5 --linebuffer test ::: "$" 

Как я могу $GLOBAL_VARвидеть из параллели?

4

2 ответа на вопрос

6
thrig

Переменные оболочки не видны дочерним процессам, если они не экспортированы, поэтому вам нужно будет сказать

export GLOBAL_VAR 

где-то до запуска дочернего процесса; в современных оболочках экспорт можно сочетать с назначением

export GLOBAL_VAR="some global value" 
0
Ole Tange

« Переменные оболочки не видны дочерним процессам, если они не экспортированы » - и даже в этом случае они все еще не видны, если вы запускаете команду удаленно. Это если вы не используете env_parallelвнешний интерфейс для GNU Parallel, который копирует среду:

 . `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 '$]}' ::: 0 1 2 env_parallel -k -S server echo '$]}' ::: 0 1 2 env_parallel -k --env myarray echo '$]}' ::: 0 1 2 env_parallel -k --env myarray -S server echo '$]}' ::: 0 1 2 

Похожие вопросы