У меня есть этот скрипт:
GLOBAL_VAR="some global value"
function test
{
echo $1
echo ${GLOBAL_VAR}
}
export -f test
parallel --jobs 5 --linebuffer test ::: "${files[@]}"
Как я могу увидеть $GLOBAL_VAR
из параллели?
У меня есть этот скрипт:
GLOBAL_VAR="some global value"
function test
{
echo $1
echo ${GLOBAL_VAR}
}
export -f test
parallel --jobs 5 --linebuffer test ::: "${files[@]}"
Как я могу увидеть $GLOBAL_VAR
из параллели?
Переменные оболочки не видны дочерним процессам, если они не экспортированы, поэтому вам нужно будет сказать
export GLOBAL_VAR
где-то до запуска дочернего процесса; в современных оболочках экспорт можно сочетать с назначением
export GLOBAL_VAR="some global value"
« Переменные оболочки не видны дочерним процессам, если они не экспортированы » - и даже в этом случае они все еще не видны, если вы запускаете команду удаленно. Это если вы не используете 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 '${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