並列化を設定するには、2つのシェルスクリプトを使用します。最初のスクリプトはforループを使用して、環境変数を2番目のスクリプトに渡します。 2番目のスクリプトはパラレルを呼び出し、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}
たとえば、Juliaを並列に実行するための上記の呼び出しは1に置き換えると正しく機能します$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}"
からインスピレーションを受けるシーケンスのシェル中括弧拡張で$variableを使用する方法は?