그래서 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
그러나 일부 측면에서는 관리가 더 쉬워지고 동시에 실행되는 작업 수를 더 쉽게 제한할 수 있습니다.