4

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

GLOBAL_VAR="some global value"

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

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

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

2 ответа2

6

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

export GLOBAL_VAR

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

export GLOBAL_VAR="some global value"
0

« Переменные оболочки не видны дочерним процессам, если они не экспортированы » - и даже в этом случае они все еще не видны, если вы запускаете команду удаленно. Это если вы не используете 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .