GNU Parallel: ¿Cómo puedo almacenar los resultados de múltiples comandos en una variable?

GNU Parallel: ¿Cómo puedo almacenar los resultados de múltiples comandos en una variable?

Esta pregunta proviene deeste otro. Pensé que era apropiado hacer otro, en lugar de editar el original.

Este es mi caso de ejemplo (una matriz con dos comandos que me gustaría ejecutar):

luis@Balanceador:~$ echo ${cmds[@]}
ls -la echo 'hola'
luis@Balanceador:~$ echo ${cmds[0]}
ls -la
luis@Balanceador:~$ echo ${cmds[1]}
echo 'hola'

Me gustaríaalmacenar los resultadosde cada comando en una variable usando GNU Parallel, como en:

luis@Balanceador:~$ value0="$(${cmds[0]})"
luis@Balanceador:~$ printf "$value0"
total 36
drwxr-xr-x   2 luis  luis   512 Jun 26 23:09 .
drwxr-xr-x  13 luis  luis   512 Jun 26 22:50 ..
-rw-r--r--   1 luis  luis  1554 Jun 26 18:31 MostrarDatosRed.config
-rwxr-xr-x   1 luis  luis  8335 Jun 26 23:44 MostrarDatosRed.sh
-rwxr-xr-x   1 luis  luis    98 Jun 26 23:10 TestParallel.sh
-rw-r--r--   1 luis  luis    19 Jun 26 18:01 instrucciones.txt
-rw-r--r--   1 luis  luis     2 Jun 26 22:06 prueba.txt

y...

luis@Balanceador:~$ value1="$(${cmds[1]})"
luis@Balanceador:~$ printf "$value1"
'hola'

¿Cómo puedo hacer esto usandoParalelo GNU?

Respuesta1

No conozco ninguna forma elegante de hacer esto. Sopalajo viene con una manera de hacerlo. Aquí hay otro que no usa archivos temporales pero que funciona incorrectamente si la salida contiene \377 (ascii 255):

IFS="$(printf "\377")" arr=($(parallel 'echo foo {} ;printf "\377"' ::: a b c))

Respuesta2

GNU Parallel ahora incluye parset:

$ parset arr echo foo {} ::: a b c
$ echo ${arr[0]}
foo a
$ echo ${arr[1]}
foo b
$ echo ${arr[2]}
foo c

$ parset v1,v2,v3 echo foo {} ::: a b c
$ echo $v3
foo c

$ parset "v1 v2 v3" echo foo {} ::: a b c
$ echo $v3
foo c

Respuesta3

Solución alternativa: almacene los resultados en variosarchivos.
Ejemplo:

parallel {1} '>' comando{#}.txt ::: "${cmds[@]}"

Los resultados parecen estar bien:

luis@Balanceador:~$ ls -la comando*
-rw-r--r--  1 luis  luis  532 Jun 27 00:33 comando1.txt
-rw-r--r--  1 luis  luis    5 Jun 27 00:33 comando2.txt
luis@Balanceador:~$ cat comando1.txt
total 40
drwxr-xr-x   2 luis  luis   512 Jun 27 00:33 .
drwxr-xr-x  13 luis  luis   512 Jun 26 22:50 ..
-rw-r--r--   1 luis  luis     0 Jun 27 00:33 comando1.txt
-rw-r--r--   1 luis  luis     5 Jun 27 00:33 comando2.txt
luis@Balanceador:~$ cat comando2.txt
hola

información relacionada