如何使用 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

您不能从 shell 外部(包括从 shell 启动的进程)在 shell 中设置变量;看例如 是否可以在用户空间中将环境变量从子级传递到父级?

我怀疑无论如何使用它会有很多意义parallel,这并不是说设置变量需要很长时间......

答案2

正如斯蒂芬·基特(Stephen Kitt)所写,将值从子级传递给父级是不可能的 - 也就是说你不能这样做没有 作弊

幸运的是,新版本的 GNU Parallel 包含一个名为parset.parset是您需要首先激活的 shell 函数。

$ . `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

如果 shell 支持数组:

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

正如斯蒂芬·基特(Stephen Kitt)所说,这比简单地分配数值要慢得多。但我认为你的例子只是一个 MCVE,所以实际情况会复杂得多,因此可能需要并行运行。

相关内容