GNU Parallelを使用して変数に値を割り当てる方法は?

GNU Parallelを使用して変数に値を割り当てる方法は?

割り当てようとしています。変わりやすい使用GNUパラレル:

$ parallel --dry-run --xapply a{1}={2} ::: a b c ::: 5 6 7
aa=5
ab=6
ac=7

しかし、実行が順調に進まないようです。

$ parallel --xapply a{1}={2} ::: a b c ::: 5 6 7
$ echo $aa

$ echo $ab

$ echo $ac

すべての場合に価値があります。

何が起こったのですか?値を指定する変数にGNU Parallelを使用しますか?

より多くのデータ:

  • 私はGNU Parallelが親プロセスから変数を継承する方法があることを知っていますが、この場合私が望むのはその逆です。

答え1

シェルの外部では、シェルに変数を設定できません(シェルで開始されたプロセスを含む)。例えば ユーザー空間で子項目から親項目に環境変数を渡すことはできますか?

とにかくそれを使用することに多くの意味があるかどうか疑われますparallel。変数の設定に時間がかかるのとは異なります...

答え2

Stephen Kittが書いたように、子から親に値を渡すことは不可能です。つまり、そうすることはできません。いいえ 不正行為

幸いなことに、GNU Parallelの新しいバージョンには、最初に有効にする必要があるシェル関数が含まれていますparsetparset

$ . `which env_parallel.bash` # Replace bash with zsh, ksh, ash, dash, sh as needed
$ parset a,b,c echo ::: 5 6 7
$ echo $a
5

シェルが配列をサポートしている場合:

$ parset arr echo ::: 5 6 7
$ echo ${arr[1]}
5 (in zsh) 6 (otherwise)

Stephen Kittが言ったように、これは単に数値を割り当てるよりはるかに遅いです。しかし、あなたの例はMCVEにすぎないので、実際の状況ははるかに複雑になるため、並行して実行する必要があるかもしれません。

関連情報