GNU 병렬: 여러 명령의 결과를 변수에 어떻게 저장할 수 있나요?

GNU 병렬: 여러 명령의 결과를 변수에 어떻게 저장할 수 있나요?

이 질문은 다음에서 비롯됩니다.이 다른. 원본을 편집하는 것보다 하나 더 만드는 게 맞다고 생각했어요.

이것은 나의 사례 시나리오 예입니다(실행하고 싶은 두 개의 명령이 있는 배열).

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

나는하고 싶다결과를 저장하다다음과 같이 GNU Parallel을 사용하여 변수의 각 명령을 처리합니다.

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

그리고...

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

다음을 사용하여 어떻게 이 작업을 수행할 수 있습니까?GNU 병렬?

답변1

나는 이것을 수행하는 우아한 방법을 알지 못합니다. Sopalajo에는 한 가지 방법이 있습니다. 다음은 임시 파일을 사용하지 않지만 출력에 \377(ascii 255)이 포함된 경우 잘못 처리하는 또 다른 것입니다.

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

답변2

GNU Parallel에는 이제 다음이 포함됩니다 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

답변3

해결 방법: 결과를 여러 곳에 저장합니다.파일.
예:

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

결과는 괜찮은 것 같습니다.

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

관련 정보