GNU並列:複数のコマンドの結果を変数に保存するには?

GNU並列:複数のコマンドの結果を変数に保存するには?

この質問は以下から来ています。この他。オリジナルを編集するよりも1つ作成する方が適切だと思いました。

これは私の例のシナリオです(実行したい2つのコマンドを含む配列)。

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))

おすすめ記事