Este es mi caso:
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 "{#}")
¿Cómo puedo hacer referencia a los elementos individuales de alguna matriz en GNU Parallel?
Seguro que es fácil, pero no he podido encontrarlo en el manual.
Esta pregunta ha sido hecha para responder.este otro, pero, después de preguntarlo, consideré que eran dos preguntas diferentes.
Respuesta1
Si bien parece fácil, en realidad es muy difícil.
Los trabajos iniciados por GNU Parallel no se inician dentro del mismo shell desde el que se ejecuta GNU Parallel. Entonces se ve así:
bash[1]---perl(running parallel)---bash[2]
$array está definido en bash[1] pero quieres usarlo en bash[2]. Es imposible hacerlo por completo (es decir, si desea acceso de escritura a la matriz), peropoderhacer unaCopiarde $array disponible:
env_parallel 'echo ${array[{}]}' ::: 1 2
env_parallel
(introducido en GNU Parallel 20140822) copia todo el entorno de bash[1] a bash[2] (por lo que su entorno debe ser un poco pequeño) donde se inicia antes de ejecutar el trabajo.
env_parallel
es bastante inestable, así que si encuentra errores, infórmelo.