我正在尝试分配变量值使用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,所以实际情况会复杂得多,因此可能需要并行运行。