GNU Parallel: как сохранить результаты нескольких команд для переменной?

Этот вопрос исходит из этого другого . Я думал, что правильно сделать другой, а не редактировать оригинальную.

Это мой примерный случайный сценарий (массив с двумя командами, которые я хотел бы выполнить):

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 Parallel ?

  • gnu-параллельная многопоточная труба использует мало CPU%, но киоски сервера
  • Соответствует ли «parallel -jobs 10», что будет выполняться ровно 10 заданий?
  • Использование параллели на Ubuntu
  • GNU Parallel: сценарий запуска на каждом узле
  • gnu параллельно без скрипта с аргументами
  • Задания GNU parallel ssh: что происходит с неполной работой, если сервер умирает?
  • GNU parallel и basefile вне pwd?
  • parallel --max-procs 4 echo ::: {1..4} не выводит результат?
  • 3 Solutions collect form web for “GNU Parallel: как сохранить результаты нескольких команд для переменной?”

    GNU Parallel теперь включает в себя parset :

     $ parset arr echo foo {} ::: abc $ echo ${arr[0]} foo a $ echo ${arr[1]} foo b $ echo ${arr[2]} foo c $ parset v1,v2,v3 echo foo {} ::: abc $ echo $v3 foo c $ parset "v1 v2 v3" echo foo {} ::: abc $ echo $v3 foo c 

    Я не знаю, как это сделать. Sopalajo приходит с одним способом сделать это. Вот еще один, который не использует tempfiles, но который имеет дело с ошибкой, если вывод содержит \ 377 (ascii 255):

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

    Обход проблемы: сохранение результатов в нескольких файлах .
    Пример:

     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 
    Linux и Unix - лучшая ОС в мире.