쉘 스크립트의 변수를 GNU 병렬로 전달

쉘 스크립트의 변수를 GNU 병렬로 전달

병렬화를 설정하기 위해 두 개의 쉘 스크립트를 사용합니다. 첫 번째 스크립트는 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}

예를 들어 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을 사용하는 방법은 무엇입니까?

관련 정보