이 while 루프를 실행하기 위해 GNU Parallel을 어떻게 사용합니까?

이 while 루프를 실행하기 위해 GNU Parallel을 어떻게 사용합니까?

그래서 while 루프가 있습니다.

cat live_hosts | while read host; do \
    sortstuff.sh -a "$host" > sortedstuff-"$host"; done

하지만 시간이 오래 걸릴 수 있습니다. 이 while 루프를 실행하기 위해 GNU Parallel을 어떻게 사용합니까?

답변1

while 루프를 사용하지 않습니다.

parallel "sortstuff.sh -a {} > sortedstuff-{}" <live_hosts

live_hosts/some/dir/file(예: )에 경로 가 있으면 이 방법은 작동하지 않습니다. 이러한 경우에는 다음 을 사용합니다 sortstuff.sh -a /some/dir/file > sortedstuff-/some/dir/file.no such file or directory{//}{/}gnu-parallel수동세부):

parallel "sortstuff.sh -a {} > {//}/sortedstuff-{/}" <live_hosts

답변2

"한 가지 일을 잘 수행"하는 구식 Unix 사용자로서 저는 문자열 대체 내용을 래퍼 스크립트에 넣습니다.

#!/bin/sh
sortstuff.sh -a "$1" > sortedstuff-"$1"

호출하는 경우 wrapper.sh호출 parallel명령은 다음과 같습니다.

parallel wrapper.sh < live_hosts

cat외부 프로그램 호출을 저장하는 이런 종류의 작업은 필요하지 않습니다 .

답변3

당신은하지 않습니다필요 parallel, 루프 본문은 이전 반복에 의존하지 않기 때문입니다. 각 호스트에 대해 새로운 백그라운드 프로세스를 시작하면 됩니다.

while read host; do
    sortstuff.sh -a "$host" > sortedstuff-"$host" &
done < live_hosts
wait    # Optional, to block until the background tasks are done

parallel그러나 일부 측면에서는 관리가 더 쉬워지고 동시에 실행되는 작업 수를 더 쉽게 제한할 수 있습니다.

관련 정보