다음과 같은 병렬 명령을 통해 스크립트에서 기본 스크립트로 변수를 전달합니다.
./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(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}
일반 일치만 수행합니다.