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

2

This question comes from this other. I thought it was proper to make another, rather than editing the original one.

Este é o meu cenário de caso de exemplo (uma matriz com dois comandos que 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 de armazenar os resultados de cada comando em uma variável usando o 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 usando o GNU Parallel ?

    
por Sopalajo de Arrierez 27.06.2016 / 00:27

3 respostas

3

O 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
    
por 29.05.2017 / 21:33
2

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 "7")" arr=($(parallel 'echo foo {} ;printf "7"' ::: a b c))
    
por 27.06.2016 / 18:35
1

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

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

Os resultados parecem estar corretos:

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
    
por 27.06.2016 / 00:42