我通过并行命令将变量从脚本传递到主脚本,例如
./script1 | parallel -u --jobs 3 "./script2 {}"
如何将职位编号作为 的第二个参数传递./script2
?
就像是
./script1 | parallel -u --jobs 3 "./script2 {} {}" ::: {1..3}
但第一个{}
应该来自./script1
.
请注意,我不想要参数的组合。相反,正在运行的作业应该是
./script2 var1 1
./script2 var2 2
./script2 var3 3
./script2 var4 1
./script2 var5 2
./script2 var6 3
./script2 var7 1
想象一下./script2' writes to files
file1.txt ,
files2.txt , and
file3.txt where the number is
{1..3}` 或作业编号。
我想确保只有一个脚本正在写入其相应的文件。换句话说,三个并行作业写入三个指定文件。
答案1
您很可能正在寻找 {%},它不是职位编号,而是职位投币口数字。
LC_ALL=C seq 10 -0.1 1 | shuf |
parallel --lb 'echo Job {} grabs {%}; sleep {}; echo Job {} releases {%}'
请注意,当一个数字被释放时,它是如何被下一个作业获取的。因此,并行运行的 2 个作业不会具有相同的 {%} 值。
GNU Parallel 2018 的第 5 章对此进行了介绍(http://www.lulu.com/shop/ole-tange/gnu-parallel-2018/paperback/product-23558902.html或者https://doi.org/10.5281/zenodo.1146014)。
答案2
我发现解决方案是--link
标记来聚合组合。
parallel -u --jobs 3 --link ./script2 {1} {2} :::: <(./script1) ::: {1..3}
然后,{1}
来自脚本,并且{2}
只是定期匹配。