我有一个为我运行模拟的python代码,我需要为许多不同的参数(字符串,一个整数和另一个Stringy Integer(运行此代码。我的问题是,当我尝试与我的论点的GNU平行部分平行时,我的论点不会经过(我的第一个字符串(。可能负责的特定行是:
parallel --bar --eta -j14 'python3 compute-heat-capacity-generational-2 $sim {1} {2}' :::
$(seq 16) :::
${gens[@]}
我从python获得的错误msg是:
追溯(最近的最新电话(:
文件" Compute-Heat-Heat-apacity-Generations-2",第20行,iternum = int(argv [3](> indexError:列表索引超出范围
因此,我的参数只有两个参数,这些参数分配给了我的并行行中的{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
之前使用参数中的双引号或进行export sim
。
parallel --bar --eta -j14 "python3 compute-heat-capacity-generational-2 $sim {1} {2}" :::
$(seq 16) :::
${gens[@]}
- bash如果字符串使用单引号(
'
(。
,bash不会在字符串中扩展变量 - 如果您执行
export sim
,则该变量将对子过程可见,并且您的变量将在以后扩展。