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