GNU 병렬로 스크립트의 많은 인스턴스를 실행하려고하지만 스크립트에는 인수가 없습니다.
‘parallel foo.sh’를 실행하면 다음과 같이 나타납니다.
parallel: Warning: Input is read from the terminal. Only experts do this on purpose. Press CTRL-D to exit.
답변
열 번 실행한다고 가정하면이 구문이 작동합니다.
parallel -n0 foo.sh ::: {1..10}
parallel
길이 ( ::: {1..10}
) 의 입력 시퀀스가 필요하며 입력 시퀀스 ( )의 내용을 무시해야 -n0
하며 길이 만 신경 쓰십시오.
원래 명령 : parallel foo.sh
에는 원하는 병렬 처리량을 나타내는 입력 시퀀스가 없습니다. 암호 경고는 parallel
입력 시퀀스에 대한 터미널 청취를 시작 하겠다고 말하고 있으며 이는 아마도 원하는 것이 아닙니다.
튜토리얼 예제는 다음과 같습니다.
seq 10 | parallel -n0 my_command my_args
작동 방식 :
parallel
항상 어딘가에서 입력 시퀀스를 가져옵니다. 인라인 공백으로 구분 된 시퀀스 앞에:::
오거나 파이프와 같은 파일 또는 파일과 같은 소스에서 개행으로 구분 된 시퀀스 일 수 있습니다. 이 예제에서 입력 시퀀스는 파이프에서 온 것입니다.seq 10
1에서 10까지 줄 바꿈으로 구분 된 숫자 시퀀스를 생성합니다.- 이
-n0
옵션은 입력 시퀀스의 값을 무시하도록 병렬에 지시합니다. 우리가 신경 쓰는 것은 내용의 길이가 아니라 시퀀스의 길이입니다. 숫자가 사용되지 않더라도 명령은 여전히 10 번 실행됩니다.
또 다른 예:
parallel -n0 echo -n 'x' ::: {1..5}
작동 방식 :
- 입력 시퀀스가 인라인입니다.
{1..5}
1에서 5 사이의 공백으로 구분 된 숫자 시퀀스를 생성합니다.-n0
시퀀스 값을 무시하고'x'
매번 문자열을 에코합니다 .- 산출:
xxxxx
다음과 비교하십시오 :
parallel echo -n ::: {1..5}
작동 방식 :
- 입력 시퀀스가 인라인입니다.
{1..5}
1에서 5 사이의 공백으로 구분 된 숫자 시퀀스를 생성합니다.- 입력 시퀀스의 각 값은에 대한 인수로 사용됩니다
echo
. 주문이 보장되지 않습니다. - 출력 :
43215
. 어떤 주문이든 가능합니다.
답변
매뉴얼의 예제를 읽었습니까? 구체적으로 https://www.gnu.org/software/parallel/man.html#EXAMPLE:-Run-the-same-command-10-times