이 질문은 다음에서 비롯됩니다.이 다른. 원본을 편집하는 것보다 하나 더 만드는 것이 더 적절하다고 생각했습니다.
다음은 내 예제 시나리오입니다(실행하려는 두 명령이 포함된 배열).
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