GNU Parallel: Wie kann ich die Ergebnisse mehrerer Befehle in einer Variablen speichern?

GNU Parallel: Wie kann ich die Ergebnisse mehrerer Befehle in einer Variablen speichern?

Diese Frage kommt vondieses andere. Ich dachte, es wäre richtiger, ein weiteres zu erstellen, anstatt das Original zu bearbeiten.

Dies ist mein Beispielszenario (ein Array mit zwei Befehlen, die ich ausführen möchte):

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

Ich möchteSpeichern der Ergebnissejedes Befehls in einer Variablen unter Verwendung von GNU Parallel, wie in:

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

Und...

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

Wie kann ich dies tun mitGNU Parallel?

Antwort1

Ich kenne keine elegante Möglichkeit, dies zu tun. Sopalajo bietet eine Möglichkeit, dies zu tun. Hier ist eine andere, die keine temporären Dateien verwendet, aber falsch reagiert, wenn die Ausgabe \377 (ASCII 255) enthält:

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

Antwort2

GNU Parallel umfasst jetzt 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

Antwort3

Workaround: Speichern Sie die Ergebnisse in mehrerenDateien.
Beispiel:

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

Die Ergebnisse scheinen in Ordnung zu sein:

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

verwandte Informationen