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