GNU Parallel 不接受变量 python 个参数

Variable python arguments not accepted by GNU Parallel

我有一个 python 代码,它 运行 对我来说是一个模拟,我需要 运行 此代码用于许多不同的参数(字符串、整数和另一个字符串整数)。我的问题是,当我尝试将其与 GNU 并行化时,我的部分参数没有通过(我的第一个字符串)。可能对此负责的特定行是:

parallel --bar --eta -j14 'python3 compute-heat-capacity-generational-2 $sim {1} {2}' ::: \
$(seq 16) ::: \
${gens[@]}

我从 python 得到的错误信息是:

Traceback (most recent call last):
File "compute-heat-capacity-generational-2", line 20, in

iterNum = int(argv[3]) > IndexError: list index out of range

所以我的论点中只有两个被通过,在我的平行线中分配给 {1}{2} 的论点。无论出于何种原因,当我尝试使用并行时,$sim 似乎没有按预期工作。

完整的脚本写在下面,我将模拟目录作为输入,遍历该目录以解析世代号,然后将这两个并行地交给我迭代所有世代和迭代的第三个参数通过 ${seq 16}

如有任何关于如何使用并行的建议,我们将不胜感激。最近几天我大部分时间都在阅读手册和示例,但我一直无法解决这个问题。我相当确定问题很简单,我如何标记我的参数“{}”并为它们提供输入,但我似乎无法找到正确的组合来实现这一目标。

#!/bin/bash

echo "Choose a simulation: "
read sim
echo "Starting Heat Capacity Calculations"

gens=(save/$sim/isings/*) 

#find all generations in simulations folder, put into array
for ((i=0; i<${#gens[@]}; i++));
do
    #find the generation number from file string
    gens[i]=$(echo ${gens[$i]} | cut -d "[" -f2 | cut -d "]" -f1)
done

parallel --bar --eta -j14 'python3 compute-heat-capacity-generational-2 $sim {1} {2}' ::: \
$(seq 16) ::: \
${gens[@]}

尝试在 parallel 的参数中使用 double-quotes,或者在调用 parallel.

之前执行 export sim
parallel --bar --eta -j14 "python3 compute-heat-capacity-generational-2 $sim {1} {2}" ::: \
$(seq 16) ::: \
${gens[@]}
    如果字符串使用单引号 ('),
  1. bash 不会扩展字符串中的变量。
  2. 如果您这样做 export sim,该变量将对 sub-processes 可见,您的变量稍后将被扩展。