GLOBAL_VAR="some global value" function test { echo $1 echo $ } export -f test parallel --jobs 5 --linebuffer test ::: "$"
Как я могу $GLOBAL_VARвидеть из параллели?
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