GNU Parallel: Como posso armazenar os resultados de vários comandos em uma variável?

GNU Parallel: Como posso armazenar os resultados de vários comandos em uma variável?

Esta pergunta vem deeste outro. Achei apropriado fazer outro, em vez de editar o original.

Este é o meu exemplo de cenário (um array com dois comandos que eu gostaria de executar):

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

Eu gostaria dearmazenar os resultadosde cada comando em uma variável usando GNU Parallel, como em:

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

e...

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

Como posso fazer isso usandoParalelo GNU?

Responder1

Não conheço nenhuma maneira elegante de fazer isso. Sopalajo vem com uma maneira de fazer isso. Aqui está outro que não usa arquivos temporários, mas que lida incorretamente se a saída contiver \377 (ascii 255):

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

Responder2

GNU Parallel agora inclui 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

Responder3

Solução alternativa: armazene os resultados em váriosarquivos.
Exemplo:

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

Os resultados parecem bons:

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

informação relacionada