将变量从 shell 脚本传递到 GNU 并行

将变量从 shell 脚本传递到 GNU 并行

我使用两个 shell 脚本来设置并行化。第一个脚本使用 for 循环将环境变量传递给第二个脚本,第二个脚本调用并行,运行 julia 脚本,再次传递变量。

第一个 ( test-loop.sh) 脚本如下所示:

for i in `seq 1 99`;
do 
export my_var=$i

bash  ~/PATH/TO/FILE/test-par.sh 
done

然后下一个文件 ( test-par.sh) 如下所示:

#!/bin/bash

parallel julia ~/PATH/TO/FILE/bash-test.jl ::: {$my_var..100..1}

例如,如果我将 替换为 1,上面对并行运行 Julia 的调用可以正常工作$my_var,但是一旦添加变量,就会出现以下错误:

ERROR: LoadError: ArgumentError: invalid base 10 digit '{' in "{99..100..1}"
Stacktrace:
 [1] tryparse_internal(#unused#::Type{Int64}, s::String, startpos::Int64, endpos::Int64, base_::Int64, raise::Bool)
   @ Base ./parse.jl:137
 [2] parse(::Type{Int64}, s::String; base::Nothing)
   @ Base ./parse.jl:241
 [3] parse(::Type{Int64}, s::String)
   @ Base ./parse.jl:241
 [4] top-level scope

我不知道如何重新格式化并行调用来解决这个问题。任何帮助非常感谢!

答案1

简单的答案就是eval像这样添加:

eval "parallel julia ~/PATH/TO/FILE/bash-test.jl ::: {$my_var..100..1}"

灵感来自如何在序列的 shell 大括号扩展中使用 $variable?

相关内容