向GNU parallel传递shell命令列表

aamkag61  于 2023-04-12  发布在  Shell
关注(0)|答案(2)|浏览(131)

我有一个shell命令列表,作为字符串存储在变量prog中,目前我通过

for I in 1 10; do 
  eval "${prog[$I]}"& 
done
wait

如何用GNU并行实现同样的结果呢?

parallel ::: seq 1 10 | { read -d '' x; eval "${prog[$x]}"; }

但我甚至不能得到上面的工作两个平行:::所以很明显我做错了
一个侧记我设法得到以下运行

parallel ::: $(  for i in {1..2}; do eval ${prog[$i]}; done )

但它并没有并行地这样做。

jei2mxaa

jei2mxaa1#

您正在寻找:

parallel ::: "${prog[@]}"
snz8szmq

snz8szmq2#

虽然不完全令人满意,但我最终采用了以下解决方案:

arg1="5"
arg2="some option"

run_parallel(){
  some_executable $1 $2 $3
}
export -f run_parallel

seq 1 50|
   parallel --pipe -N1 --jobs 10 'read I; run_parallel $I '"$arg1"' '"$arg2"';'

我并不完全满意,因为我刚刚发现我不能使用进度条沿着--pipe,而且我不知道如何使用pipe。所以如果有人知道,请告诉我。另外,我无法找到一种方法来做到这一点,而不像上面那样结合双精度和单精度quites,所以看起来也有点奇怪。当我通过shell检查运行这个程序时,它说例如

(info): Expressions don't expand in single quotes, use double quotes for that.

尽管如此,它仍然工作,并产生预期的结果与正确的参数到可执行文件,所以它仍然是一个解决方案(它避免了使用eval,因为我以前尝试,所以这是一些额外的好处)。

相关问题