シェルスクリプトの変数をGNU並列に渡す

シェルスクリプトの変数をGNU並列に渡す

並列化を設定するには、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を使用する方法は?

おすすめ記事