GNU Parallel: Como posso referenciar elementos do array?

GNU Parallel: Como posso referenciar elementos do array?

Este é o meu cenário:

luis@Balanceador:~$ echo ${array[@]}
a b
luis@Balanceador:~$ echo ${array[1]}
a
luis@Balanceador:~$ echo ${array[2]}
b
luis@Balanceador:~$ parallel echo ${array[]} ::: 1 2
-bash: ${array[]}: bad substitution
luis@Balanceador:~$ parallel echo ${array[{}]} ::: 1 2
-bash: {}: syntax error: operand expected (error token is "{}")
luis@Balanceador:~$ parallel echo ${array[{1}]} ::: 1 2
-bash: {1}: syntax error: operand expected (error token is "{1}")
luis@Balanceador:~$ parallel echo ${array[{#}]} ::: 1 2
-bash: {#}: syntax error: operand expected (error token is "{#}")

Como posso referenciar os elementos individuais de algum array no GNU Parallel?

Claro que é fácil, mas não consegui encontrá-lo no manual.

Esta pergunta foi feita para respondereste outro, mas, depois de perguntar, considerei que eram duas perguntas diferentes.

Responder1

Embora pareça fácil, é realmente muito difícil.

Os trabalhos iniciados pelo GNU Parallel não são iniciados dentro do mesmo shell a partir do qual o GNU Parallel é executado. Então é assim:

bash[1]---perl(running parallel)---bash[2]

$array é definido em bash[1] mas você deseja usá-lo em bash[2]. É impossível fazer isso completamente (ou seja, se você quiser acesso de gravação ao array), mas nóspodefaça umcópia dede $ array disponível:

env_parallel 'echo ${array[{}]}' ::: 1 2

env_parallel(introduzido no GNU Parallel 20140822) copia todo o ambiente do bash[1] para o bash[2] (então seu ambiente deve ser bem pequeno) onde é iniciado antes da execução do trabalho.

env_parallelé bastante instável, então se você encontrar bugs, por favor reporte-os.

informação relacionada